Azure IoT Hub-Message enrichments( 消息扩充)
本文了解:
Azure IoT Hub Message enrichments (消息扩充)是什么?
适用于什么场景?
能扩充什么内容?
使用限制?
视频讲解:
您可以在B站观看视频讲解:https://www.bilibili.com/video/BV1Vi4y147hX/
或者在本站观看:
图文介绍:
概念及适用场景:
消息扩充是消息路由中的一个附加功能,通过消息扩充,能将特定的常量或变量添加到D2C(或其他类型)的消息事件中,经由消息路由发送到指定的终结点(包含默认终结点);
截至2020.05,本功能仅在Global Azure 可用。
例如,
某传感器通过D2C上传了 温湿度值,我们可以在消息到达云端后,经由消息路由前,自动将 记录于device twin中的Tags中的location信息添加到消息中,然后发送到指定的终结点,该终结点负责将消息以短信的形式发送出去,location信息作为短信的一部分。
这个案例非常典型,如果没有消息扩充,我们在消息到达云端后,需要先从数据库或者Device Twin中查询出设备所在的位置,然后才能拼写出完整的短信内容,则至少有一次显式查询Device Twin的过程。
消息扩充除了D2C,还支持:
- 设备遥测数据,例如温度或压力(D2C)
- 设备孪生更改通知 - 设备孪生中发生的更改
- 设备生命周期事件,例如创建或删除了设备时
能扩充什么内容:
-
任意静态字符串。 不允许条件、逻辑、操作和函数等动态值。
-
发送消息的 IoT 中心的名称。 此值为 $iothubname。
-
设备孪生中的信息,例如其路径。 示例包括 $twin.tags.field 和 $twin.tags.latitude。
注意:只有 $iothubname、$twin.tags、$twin.properties.desired 和 $twin.properties.reported 是消息扩充支持的变量。
使用限制:
-
对于标准或基本层中的每个 IoT 中心,最多可以添加 10 个扩充。 对于免费层中的 IoT 中心,最多可以添加 2 个扩充。
-
在某些情况下,如果你要使用设置为设备孪生中的标记或属性的值应用扩充,该值将扩充为字符串值。 例如,如果某个扩充值设置为 $twin.tags.location,则会使用字符串“$twin.tags.location”而不是孪生中该字段的值(比如:上海市浦东新区)来扩充消息。
这适用于以下情况:
-
IoT 中心位于基本层中。 基本层 IoT 中心不支持设备孪生。
-
IoT 中心位于标准层中,但发送消息的设备没有设备孪生。
-
IoT 中心位于标准层中,扩充值使用的设备孪生路径不存在。 例如,如果扩充值设置为 $twin.tags.location,并且设备孪生在标记下没有位置属性,该会使用字符串“$twin.tags.location”戳记消息。
-
-
对设备孪生所做的更新最长可能需要在五分钟后才反映在相应的扩充值中。
-
总消息大小(包括扩充)不能超过 256 KB。 如果消息大小超过 256 KB,IoT 中心会丢弃消息。
重点步骤:
1. 配置IoT Hub和消息路由,本例子中将所有消息直接路由到服务总线队列当中,请参照《》
2. 在Device Twin中配置如下 tag:
增加:
"tags": {
"location": "上海市浦东新区"
},
如下图所示:
3. 添加 三个消息扩充,如下图所示:
4. 验证结果,根据前文介绍,则出现如下结果:
配置 消息扩充之前:
配置消息扩充之后:
Message Custom Properties 增加了如下三个字段:
1. iothub-name: 实际的iot hub的名称;
2.device-location: device twin tags中的location 信息 ;
3.device-soft-version: “$twin.tags.softversion”,因为device twin tags中没有 softversion属性,故而将原始变量名称传递了过来。