作为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}
使用它。
有可能吗?
答案 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消息:
从MQTTBox接收C2D消息: