Кажется, что свойства сообщения теряются после маршрутизации через Azure IoT edgeHub - PullRequest
0 голосов
/ 20 декабря 2018

Я не уверен, что это ошибка или я что-то упустил.Я также создал проблему на GitHub несколько дней назад, но пока без резонанса.

Вот мой сценарий: я использую Raspberry Pi в качестве прозрачного IoT Edge Gateway с двумя пользовательскимимодули в дополнение к edgeAgent и edgeHub.EdgeHub сконфигурирован для маршрутизации сообщений, поступающих с конечного устройства, на один из пользовательских модулей с маршрутом ниже.

FROM /messages/* WHERE NOT IS_DEFINED($connectionModuleId) INTO BrokeredEndpoint(\"/modules/camera-capture/inputs/input1\")

В модуле я добавил функцию, которая прослушивает входящие сообщения на входе1, и я могу видетьсообщения и распечатать тело сообщения.В приложении для конечных устройств я отправляю сообщения через MQTT со свойствами приложения (см. Фрагмент кода 1).Когда я изменяю маршрут на ...

FROM /messages/* WHERE (CameraState = 'true') INTO BrokeredEndpoint(\"/modules/camera-capture/inputs/input1\")

..., только половина сообщений направляется в модуль, что указывает на то, что свойство найдено в edgeHub и правильно интерпретировано.Однако, когда я пытаюсь извлечь свойства сообщения в модуле CameraCapture (см. Фрагмент кода 2), они кажутся пустыми (см. Вывод консоли).

Таким образом, кажется, что свойства сообщения теряются послемаршрутизация через краевой концентратор.Также тот же результат с использованием AMQP.

Вот как я отправляю сообщение (фрагмент 1):

client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
set_certificates(client)
message = IoTHubMessage("test message")

# send a message every two seconds
while True:
     # add custom application properties
     prop_map = message.properties()
     if run_camera:
         prop_map.add_or_update("CameraState", "true")
     else:
         prop_map.add_or_update("CameraState", "false")

     client.send_event_async(message, send_confirmation_callback, None)
     print("Message transmitted to IoT Edge")
     time.sleep(2)

Это получатель (фрагмент 2):

def receive_message_callback(message, hubManager):
    global RECEIVE_CALLBACKS
    message_buffer = message.get_bytearray()
    size = len(message_buffer)
    print ( "Message received: %s" % message_buffer[:size].decode('utf-8'))
    map_properties = message.properties()
    key_value_pair = map_properties.get_internals()
    print ("Key value pair: %s" % key_value_pair)
    return IoTHubMessageDispositionResult.ACCEPTED

РЕДАКТИРОВАТЬ: Добавлены журналы консоли:

Message received: test message
Key value pair: {}
Waiting...
Waiting...
Message received: test message
Key value pair: {}

1 Ответ

0 голосов
/ 27 июня 2019

Проблема известна и отслеживается на github: https://github.com/Azure/azure-iot-sdk-python/issues/244

...