为发送至Azure IoT Hub的MQTT消息添加自定义属性
用MQTT客户端(如Mosquitto)向Azure IoT Hub发送带自定义属性的消息方案
方案1:MQTT 5.0 User Properties(推荐)
如果你的MQTT客户端支持MQTT 5.0(比如新版Mosquitto),直接利用MQTT协议的User Properties字段传递自定义属性即可——Azure IoT Hub会自动将这些键值对识别为消息的自定义应用属性,和官方SDK的效果完全一致。
以mosquitto_pub为例,用-D参数添加User Properties:
mosquitto_pub -h {你的IoT Hub名称}.azure-devices.net -p 8883 -i {设备ID} -u "{你的IoT Hub名称}.azure-devices.net/{设备ID}/api-version=2021-04-12" -P {SAS令牌} -t "devices/{设备ID}/messages/events/" -m "Hello from mosquitto" -D publish user-property customProp1 "value1" -D publish user-property customProp2 "value2"
方案2:MQTT 3.1.1兼容格式
如果只能使用MQTT 3.1.1(客户端不支持5.0),需要把自定义属性以JSON格式放在消息payload的最开头,后跟一个换行符,再拼接实际的消息内容。Azure IoT Hub会自动解析前面的JSON作为自定义属性,换行后的内容作为消息体。
示例payload结构:
{"customProp1":"value1","customProp2":"value2"} Hello from mosquitto
用mosquitto_pub发送的命令示例:
mosquitto_pub -h {你的IoT Hub名称}.azure-devices.net -p 8883 -i {设备ID} -u "{你的IoT Hub名称}.azure-devices.net/{设备ID}/api-version=2021-04-12" -P {SAS令牌} -t "devices/{设备ID}/messages/events/" -m $'{"customProp1":"value1","customProp2":"value2"}\nHello from mosquitto'
验证方法
发送后可以用Azure CLI的命令查看消息是否携带正确的自定义属性:
az iot hub monitor-events --hub-name {你的IoT Hub名称} --device-id {设备ID}
在输出的properties字段下就能看到你添加的自定义属性。
内容的提问来源于stack exchange,提问作者Anh Tu
相关产品推荐
相关产品推荐

