Azure IoT Hub - 在2个主题上向一个设备发送消息(C2D),而不是设备绑定/#

时间:2018-02-13 20:48:40

标签: mqtt azure-iot-hub

作为MQTT客户端(设备),我使用devices/{deviceid}/messages/devicebound/#主题来接收云到设备的消息。这个设备对我来说是一个网关,它附带了3个设备。 我想在3个不同的主题上向3个网关发送3个不同的命令,比如

devices/{deviceid}/messages/devicebound/device1
devices/{deviceid}/messages/devicebound/device2
devices/{deviceid}/messages/devicebound/device3

我的网关已在iot-hub中注册,我在{deviceid}使用它。

有可能吗?

1 个答案:

答案 0 :(得分:0)

根据官方文件“Communicate with your IoT hub using the MQTT protocol”,它说:

  

由于IoT Hub不是通用的pub-sub消息代理,因此   仅支持记录的主题名称和主题过滤器。

     

IoT Hub使用主题名称传递消息   devices / {device_id} / messages / devicebound /,或   devices / {device_id} / messages / devicebound / {property_bag}(如果有)   任何消息属性。

以下是使用系统属性“messageId”作为过滤器的解决方案。所以你的三个主题:

devices/{deviceid}/messages/devicebound/device1 
devices/{deviceid}/messages/devicebound/device2 
devices/{deviceid}/messages/devicebound/device3

看起来像这样:

devices/{deviceid}/messages/devicebound/%24.mid=device1&%24.to=%2Fdevices%2Ftest1%2Fmessages%2FdeviceBound&iothub-ack=full
devices/{deviceid}/messages/devicebound/%24.mid=device2&%24.to=%2Fdevices%2Ftest1%2Fmessages%2FdeviceBound&iothub-ack=full
devices/{deviceid}/messages/devicebound/%24.mid=device3&%24.to=%2Fdevices%2Ftest1%2Fmessages%2FdeviceBound&iothub-ack=full

这是测试:

从azure设备资源管理器发送C2D消息:

enter image description here

从MQTTBox接收C2D消息:

enter image description here