我不确定这是否是错误或缺少什么。几天前,我还在GitHub上创建了一个问题,但到目前为止没有引起人们的共鸣。
这是我的情况: 我正在将Raspberry Pi作为透明的IoT Edge网关运行,除了edgeAgent和edgeHub之外,它还具有两个自定义模块。 edgeHub配置为使用以下路由将来自叶设备的消息路由到自定义模块之一。
FROM /messages/* WHERE NOT IS_DEFINED($connectionModuleId) INTO BrokeredEndpoint(\"/modules/camera-capture/inputs/input1\")
在模块中,我添加了一个函数,用于侦听input1上的传入消息,并且可以看到消息并打印消息正文。在叶子设备应用程序中,我正在通过具有应用程序属性的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: {}
答案 0 :(得分:0)
问题已在github上发现并跟踪:https://nodejs.org/api/process.html#process_event_uncaughtexception