在发送到IoT中心的消息中定义/创建应用程序属性需要什么?
我有一个演示设备,可以在其中使用 C客户端SDK 创建消息,并且一切正常。可以基于应用程序属性值路由这些传入消息,并且在侦听IoT中心的Azure函数中正确设置了 EventData 参数。
另一台设备也在将数据发送到同一IoT中心。我的客户直接在此设备上运行代码,但是我怀疑他们是否使用了SDK。相反,我假设他们自己创建了整个有效负载。
对我来说,传入的JSON 看起来基本相同,就像使用SDK开发的一样。它包含用于 applicationProperties 的部分和用于 body 的部分。
{
"applicationProperties": {
"type": "telemetry",
"version": "1.0"
},
"body": {
"device_id": "sensor1",
"datetime": "2019-05-09T10:44:04Z",
"channels": {
"T": 24.42,
"H": 44.87,
"C": 1234
}
}
}
但是事实证明,将消息作为整个视为正文。
那么为什么此消息表现不同?在不使用SDK时,要做什么以告诉IoT中心什么是应用程序属性以及什么是 real 正文?
答案 0 :(得分:0)
如果直接使用MQTT协议,则应用程序和系统属性是主题的一部分,请参见以下示例:
devices/Device1/messages/events/location=abcd&$.to=deviceABC
Visual Studio 2019 Cloud Explorer收到的输出遥测消息:
[Monitor D2C Message] [5/9/2019 7:54:40 AM] Message received on partition 2:{"counter":17,"time":"2019-05-09T14:54:40.1984163Z","deviceId":"Device1","windSpeed":9.1991,"temperature":14.88,"humidity":81.66}
Application properties:
location: abcd
System properties:
iothub-connection-device-id: Device1
iothub-connection-auth-method: {"scope":"device","type":"sas","issuer":"iothub","acceptingIpFilterRule":null}
iothub-connection-auth-generation-id: 636550937738557556
iothub-enqueuedtime: 5/9/2019 2:54:38 PM
iothub-message-source: Telemetry
x-opt-sequence-number: 13069
x-opt-offset: 5989280
x-opt-enqueued-time: 5/9/2019 2:54:38 PM
EnqueuedTimeUtc: 5/9/2019 2:54:38 PM
SequenceNumber: 13069
Offset: 5989280
to: deviceABC
在使用诸如Https之类的无连接协议时,应用程序和系统属性是标头的一部分。以下示例显示了MQTT协议的上述属性:
iothub-app-location:abcd
iothub-to:deviceABC