消息擴充 是IoT中心在將消息發送到指定終結點之前使用其他資訊 標記 消息的功能。 使用訊息擴充的其中一個原因是要包含可用於簡化下游處理的資料。 例如,使用設備孿生標記豐富設備遙測消息可以減少客戶對此資訊進行設備孿生 API 調用的負載。
消息擴充具有三個關鍵要素:
擴充名稱或金鑰
值
應為其應用擴充的一個或多個 端點 。
key 是一個字串。 鍵只能包含字母數位字元或以下特殊字元:連字元 ()、-
下劃線 ()_
和句點 (.
)。
該值可以是以下任一示例:
任何靜態字串。 不允許使用動態值,例如條件、邏輯、作和函數。 例如,如果您開發一個由多個客戶使用的 SaaS 應用程式,則可以為每個客戶分配一個識別碼,並使該標識碼在應用程式中可用。 當應用程式運行時,IoT 中心將使用客戶的標識碼標記設備遙測消息,從而可以為每個客戶以不同的方式處理消息。
發送消息的IoT中心的名稱。 此值為 $iothubname。
來自設備孿生的資訊,例如其路徑。 示例包括 $twin.tags.field 和 $twin.tags.latitude。
備註
目前,只有 $iothubname、 $twin.tags、 $twin.properties.desired和 $twin.properties.reported 是消息擴充支持的變數。 此外,擴充僅支援基元類型。 消息不能使用物件類型進行擴充。
消息擴充將作為應用程式屬性添加到發送到所選終端節點的消息中。
應用擴充
這些消息可以來自 IoT中心消息路由支援的任何數據源,包括以下範例:
- 設備遙測,例如溫度或壓力
- 設備孿生更改通知 -- 設備孿生中的更改
- 設備生命週期事件,例如創建或刪除設備時
可以向發送到IoT中心的內置終結點的消息或路由到自定義終結點(如 Azure Blob 儲存、服務總線佇列或服務總線主題)的消息添加擴充。
還可以向發佈到事件網格的消息添加擴充內容,方法是先創建具有設備遙測消息類型的事件網格訂閱。 基於此訂閱,我們將在 Azure IoT 中心為遙測創建預設路由。 此單個路由可以處理所有事件網格訂閱。 然後,您可以使用IoT中心消息路由部分的Enrich messages 選項卡為終端節點配置擴充。 有關使用事件網格對事件做出反應的資訊,請參閱 IoT中心和事件網格。
按終端節點應用擴充。 如果您指定要為特定終端節點標記的 5 個擴充,則發送到該終端節點的所有消息都將使用相同的 5 個擴充進行標記。
可以使用以下方法配置擴充:
方法 | 命令 |
---|---|
入口網站 | Azure 門戶 請參閱 消息擴充教程 |
Azure 命令列介面 (Azure CLI) | az IoT Hub message-enrichment |
Azure PowerShell | Add-AzIotHubMessageEnrichment |
添加消息擴充不會增加消息路由的延遲。
要試用消息擴充,請參閱 消息擴充教程
局限性
對於標準層或基本層中的這些中心,最多可以為每個IoT中心添加10個擴充。 對於免費層中的IoT中心,最多可以添加2個擴充。
在某些情況下,如果要使用設置為設備孿生中的標記或屬性的值來擴充消息,則該值將使用指定的設備孿生路徑進行標記。 例如,如果擴充值設置為 $twin.tags.field,則消息將使用字串“$twin.tags.field”進行標記,而不是使用孿生體中該字段的值。 在以下情況下會發生此行為:
IoT 中心位於基本層中。 基本層IoT中心不支持設備孿生。
IoT 中心位於標準層中,但用於擴充值的設備孿生路徑不存在。 例如,如果擴充值設置為 $twin.tags.location,並且設備孿生在 tags 下沒有 location 屬性,則消息將標記字串“$twin.tags.location”。
IoT 中心位於標準層中,但用於擴充值的設備孿生路徑解析為物件,而不是簡單屬性。 例如,如果擴充值設置為 $twin.tags.location,並且 tags 下的 location 屬性是包含子屬性的物件,則
{"building": 43, "room": 503}
消息將標記字串“$twin.tags.location”。
對設備孿生的更新可能需要長達 5 分鐘的時間才能反映在相應的擴充值中。
消息總大小(包括擴充)不能超過 256 KB。 如果消息大小超過 256 KB,IoT 中心將刪除該消息。 您可以使用 IoT中心指標 來識別和調試消息被丟棄時的錯誤。 例如,您可以監控路由指標中的遙測消息不相容 (d2c.telemetry.egress.invalid) 指標。 若要深入了解,請參閱監視 IoT 中樞。
消息擴充不適用於數位孿生體更改事件。
模組不會繼承其對應裝置的雙重標記。 源自設備模組(例如,來自IoT Edge模組)的消息的擴充必須使用在模組孿生上設置的孿生標記。
定價
消息擴充無需額外付費。 目前,當您向IoT中心發送消息時,您需要付費。 您只需為該消息支付一次費用,即使該消息發送到多個終端節點也是如此。
後續步驟
有關將消息路由到IoT中心的詳細資訊,請查看以下文章: