Агент AWS IOT Python Job зависает в методе подключения - PullRequest
0 голосов
/ 25 февраля 2019

Я использую ниже код агента работы AWS для подключения устройства к AWS для работы с агентом работы.

https://github.com/aws/aws-iot-device-sdk-python

, который работает, как и ожидалось, большую часть времени.Но вдруг в методе connect () это произошло несколько раз.Поэтому после этого я не могу вызвать агента по работе из AWS.Мне нужно перезапустить программу Jobagent на устройстве, чтобы снова установить соединение (я использую этот JobAgent в качестве службы в rasperypi)

Единственная причина, по которой я подозреваю, заключается в том, что в большинстве случаев интернет-соединение прерывается при получении соединения (AWSIoTMQTTThingJobsClient) .программа замораживания в jobsClient.connect () line.

Что мне нужно обновить в моем коде, чтобы избежать этой проблемы.Я использую AWSIoTPythonSDK последней версии (1.4.3)

while True:
try:
    # to check internet availability before connect
    if is_connected():
        # Init AWSIoTMQTTClient
        myAWSIoTMQTTClient = None
        if useWebsocket:
            myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId, useWebsocket=True)
            myAWSIoTMQTTClient.configureEndpoint(host, port)
            myAWSIoTMQTTClient.configureCredentials(rootCAPath)
        else:
            myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
            myAWSIoTMQTTClient.configureEndpoint(host, port)
            myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)

        # AWSIoTMQTTClient connection configuration
        myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20)
        myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
        myAWSIoTMQTTClient.configureMQTTOperationTimeout(10)  # 5 sec

        jobsClient = AWSIoTMQTTThingJobsClient(clientId, thingName, QoS=1, awsIoTMQTTClient=myAWSIoTMQTTClient)

        jobsClient.connect()
        jobsMsgProc = JobsMessageProcessor(jobsClient, clientId)
        jobsMsgProc.processJobs()
        while not jobsMsgProc.isDone():
            time.sleep(2)
    else:
        print("Internet connection NA")
        time.sleep(60)
except (connectTimeoutException,publishTimeoutException,subscribeTimeoutException):
    time.sleep(60)
    try:
        jobsClient.disconnect()
    except:
        pass
except Exception as e:
    time.sleep(60)
    try:
        jobsClient.disconnect()
    except:
        pass
...