azure IoT Edge:模块生命周期和通信最佳实践

n9vozmp4  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(106)

关于使用Azure IoT Edge设备时的最佳实践,我有几个问题。
我有一个模块,通过边缘设备上的部署清单部署。这个模块处理消息,如果需要,调用API。这工作正常。我想向该边缘设备发送消息,并让该模块处理它们。我遵循了this tutorial,它似乎发送消息没有任何问题。
不过,我对几件事不确定:
我的问题:
1.如何查看已发送的消息?如何将它们路由到模块输入?如果我有一个正在运行的模块监听消息,它工作正常(就像上面教程中的情况一样,但是如果它没有运行,或者由于网络问题而失败呢?
我试着通过定义路由来玩一点,但我不认为它们是为从云发送的消息而设计的。
1.我的模块应该一直在运行吗?这个模块是一个python脚本,当它完成后,它就退出了。如果将所需状态设置为stopped,并将重启策略设置为always以外的其他内容,则这是很好的。但是,默认值为runningalways
1.如果它们不需要一直运行,我考虑过让一个模块负责处理消息,并根据这些模块启动相应的模块。这很常见吗我在想我是不是漏掉了什么
非常感谢你花时间阅读我!

4sup72z8

4sup72z81#

第一个问题

我已经提到了这个MSDOC路由和端点,用于发送消息和监视事件。

  • 对于最佳实践,请使用trycatch发送消息IoT设备。它跟踪传递到未运行或由于网络问题而失败的模块的消息,并将其保留在队列中,直到模块备份。Azure IoT Edge保证消息传递的可靠性。明智的做法是规划您的策略,以处理零星的模块可用性和网络中断。利用Azure IoT Edge的消息重试方法、缓冲功能和离线支持。
    向模块发送消息
import  logging
from azure.iot.device  import  IoTHubDeviceClient
logging.basicConfig(level=logging.INFO)
connection_string = "connection string of the module"
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
device_client.connect()
message = "Hello, IoT Hub!"
device_client.send_message(message)
logging.info("Message sent: %s", message)
device_client.disconnect()

az iot hub monitor-events -n {iothub_name} -d {device_id}

发送消息的物联网设备tryexcept

from azure.iot.device  import  IoTHubDeviceClient, exceptions
connection_string = "Device connection string"
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
try:
message = "Hello, IoT Hub!"
device_client.send_message(message)
print("Message sent successfully.")
print("The message is : "+message)
except  exceptions.ConnectionDroppedError:
print("Failed to send message. Connection to IoT Hub dropped.")
except  Exception  as  e:
print("An error occurred while sending the message:", str(e))

注:

启用路由时,消息将发送到路由点。

路由:

我们可以路由上述端点。我从上面的文档路由到Event Hub,并能够捕获物联网设备的消息。

相关问题