Azure IoT 中心简单的发布-订阅通信

Azure IoT hub simple publish-subcribe communication

我是 Microsoft 的 Azure IoT 中心和 MQTT/AMQP 一般通信的新手,我正在尝试在我的 raspberry pi 和计算机上的 Ubunutu VM 运行 之间建立简单的通信.我打算使用我的 pi 作为客户端将消息发布到我的 VM 上的服务 运行,该服务只是将消息内容回显到标准输出。在阅读了 Azure website/github 页面上的所有文献之后,我很难找到执行此操作的最佳方法。是否可以在您的本地网络上托管服务? SDK 上的 iotHub 服务客户端样本是用作服务还是用作与 Azure 上的现有服务(SQL 数据库、网络服务器等)通信的客户端?我能够使用 azure-iot-sdk-c/iothub_client/samples/iothub_client_sample_mqtt.c 示例将消息发送到我的 IoT 中心门户,但无法确定将我的消息发布到的主题包含在何处。我真的很感激 help/input。

谢谢

Azure IoT 设备 SDK 旨在构建设备应用程序,这些应用程序将与位于 Azure 云中的 Azure IoT 中心服务连接并进行通信。

Azure IoT 服务 SDK 旨在构建应用程序,这些应用程序将用于配置、监控 Azure IoT 中心服务 运行 实例并与之交互Azure 云。

如果您正在寻找一种简单的解决方案来利用 MQTT 建立本地设备到设备或设备到服务器的通信,您可以看看那里的 MQTT 代理解决方案。

现在,如果您想利用物联网云来管理设备、轻松保护和验证它们、以高吞吐量将遥测数据上传到云并利用云中的高级分析服务(大数据、机器学习、 ...),那么 Azure IoT 中心适合你。

Azure IoT Hub 只是一个消息通道,它不处理消息。

对于设备端 (raspberry pi),您使用设备 SDK 通过 MQTT 发送 D2C 消息,并且可以正常工作。对于服务端 (Ubuntu VM),您需要 Event Hub SDK 来接收由 raspberry pi 发送的 D2C 消息(为什么是 Event Hub?https://blogs.msdn.microsoft.com/zhqqitest/2017/03/18/do-not-make-it-a-mess-why-therere-so-many-endpoints-in-iot-hub/)。

此外,IoT Hub 仅支持设备端的 MQTT,也就是说,您无法在服务端(Ubuntu VM)使用 MQTT 连接到 IoT Hub,但您需要 AMQP。

你可能还有一个问题,服务端监听D2C消息的AMQP主题是什么?这是 /<compatibleName>/ConsumerGroups/<ConsumerGroups>/Partitions/<PartitionID>.

  • compatibleName: IoT Hub Event Hub-compatible name (what a mess :-S), 你可以从Azure portal (Endpoints – Built-in endpoints – Events)找到它
  • ConsumerGroups:您可以从 Azure 门户中找到它,默认情况下 $Default
  • PartitionID:Partition ID,当你用AMQP连接到Event Hub时可以得到它,它是一个数字,通常从0
  • 开始

如果您不想直接调用 AMQP,只需在 Ubuntu VM 上使用事件中心 SDK 和 IoT 中心连接字符串(不是事件中心兼容的端点或事件中心兼容的名称, Event Hub SDK 会为你做这件事)。