乐闻世界logo
搜索文章和话题

How do you set Azure IoT Hub "System Properties" using native MQTT?

1 个月前提问
1 个月前修改
浏览次数4

1个答案

1

在使用 MQTT 协议直接与 Azure IoT Hub 通信时,你需要正确设置消息的“系统属性”,这些属性可以帮助 IoT Hub 理解和正确处理发送到它的消息。以下是一些步骤和示例,说明如何在 MQTT 消息中设置这些“系统属性”:

1. 理解系统属性

Azure IoT Hub 的系统属性包括:

  • message-id:消息的唯一标识符。
  • correlation-id:相关消息的标识符。
  • content-type:消息内容的类型,如 application/json
  • content-encoding:消息内容的编码方式,如 utf-8

2. 设置MQTT主题来包含系统属性

当使用 MQTT 发布消息到 IoT Hub 时,你需要在 MQTT 的 topic 名称中包含这些系统属性。这些属性应该作为主题名称的一部分,格式如下:

shell
devices/{device-id}/messages/events/{property_bag}

其中 {property_bag} 是一个由 & 分隔的键值对列表,例如:

shell
devices/mydevice/messages/events/content-type=application%2Fjson&content-encoding=utf-8

3. 发布消息

假设你正在使用某种 MQTT 客户端库,例如 Python 中的 paho-mqtt,下面是如何发送包含系统属性的消息的示例代码:

python
import paho.mqtt.client as mqtt # MQTT 客户端设置 client = mqtt.Client() client.username_pw_set(username="{iot_hub_hostname}/{device_id}/?api-version=2019-03-30", password="{sas_token}") client.connect("{iot_hub_hostname}", 8883) # MQTT 主题,包括系统属性 topic = "devices/mydevice/messages/events/content-type=application%2Fjson&content-encoding=utf-8" # 消息内容 message = '{"temperature": 22.5}' # 发布消息 client.publish(topic, payload=message, qos=1) client.disconnect()

4. 确认和调试

确保你的设备已正确注册并能在 IoT Hub 中被认证。使用正确的 SAS token 和设备 ID 进行连接。如果消息没有正确处理,检查 IoT Hub 的监视工具和日志来诊断问题。

通过这种方式,你可以确保通过 MQTT 发送到 Azure IoT Hub 的消息携带正确的系统属性,从而使得消息能够被正确解析和处理。

2024年8月21日 01:41 回复

你的答案