Azure IoT Hub-Message enrichments( 消息擴充)
本文了解:
Azure IoT Hub Message enrichments (消息擴充)是什麼?
適用於什麼場景?
能擴充什麼內容?
使用限制?
視頻講解:
https://www.51azure.cloud/post/2020/5/11/azure-iot-hub-message-enrichments-quick-start
圖文介紹:
概念及適用場景:
消息擴充是消息路由中的一個附加功能,通過消息擴充,能將特定的常量或變量添加到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屬性,故而將原始變量名稱傳遞了過來。