【问题标题】:Azure IoT hub simple publish-subcribe communicationAzure IoT 中心简单的发布-订阅通信
【发布时间】:2017-03-17 16:25:54
【问题描述】:
我是 Microsoft 的 Azure IoT Hub 和 MQTT/AMQP 通信的新手,我正在尝试在我的树莓派和我的计算机上运行的 Ubunutu VM 之间建立简单的通信。我打算使用我的 pi by 作为客户端将消息发布到在我的 VM 上运行的服务,该服务只是将消息内容回显到标准输出。在阅读了 Azure 网站/github 页面上的所有文献后,我很难找到最好的方法。是否可以在本地网络上托管服务? SDK 上的 iotHub 服务客户端示例是用作服务还是用作与 Azure 上的现有服务(SQL 数据库、Web 服务器等)通信的客户端?我能够使用 azure-iot-sdk-c/iothub_client/samples/iothub_client_sample_mqtt.c 示例将消息发送到我的 IoT 中心门户,但无法确定将消息发布到的主题的位置。我真的很感激任何帮助/意见。
谢谢
【问题讨论】:
标签:
azure
azure-iot-hub
azure-iot-sdk
【解决方案1】:
Azure IoT 设备 SDK 旨在构建设备应用程序,这些应用程序将与位于 Azure 云中的 Azure IoT Hub 服务连接并通信。
Azure IoT 服务 SDK 旨在构建应用程序,用于配置、监控 Azure IoT Hub 服务实例并与之交互。
如果您正在寻找一种利用 MQTT 建立本地设备到设备或设备到服务器通信的简单解决方案,您可以查看 MQTT 代理解决方案。
现在,如果您想利用物联网云来管理设备、轻松保护设备并对其进行身份验证,以高吞吐量将遥测数据上传到云,并利用云中的高级分析服务(大数据、机器学习、.. .),那么 Azure IoT Hub 就适合你。
【解决方案2】:
Azure IoT Hub 只是一个消息通道,它不处理消息。
对于设备端(树莓派),您使用设备 SDK 通过 MQTT 发送 D2C 消息,并且可以正常工作。对于服务端(Ubuntu VM),您需要 Event Hub SDK 来接收树莓派发送的 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,也就是说,您无法使用服务端的 MQTT(Ubuntu VM)连接到 IoT Hub,但您需要 AMQP。
你可能还有一个问题,那么服务端监听D2C消息的AMQP主题是什么?我是/<compatibleName>/ConsumerGroups/<ConsumerGroups>/Partitions/<PartitionID>。
- compatibleName:IoT Hub 事件中心兼容名称(真是一团糟:-S),您可以从 Azure 门户中找到它(端点 - 内置端点 - 事件)
- ConsumerGroups:您可以从 Azure 门户中找到它,默认为
$Default
- PartitionID:分区ID,用AMQP连接Event Hub时可以得到,是一个数字,一般从
0开始
如果您不想直接调用 AMQP,您可以简单地在 Ubuntu VM 上使用带有 IoT 中心连接字符串的事件中心 SDK(不是与事件中心兼容的端点或与事件中心兼容的名称,事件中心 SDK 会执行此操作给你)。