使用 IoT 中樞訊息路由將裝置到雲端訊息傳送到 Azure 服務
訊息路由可讓您以自動化、可調整且可靠的方式將訊息從您的裝置傳送到雲端服務。 訊息路由可用於:
傳送裝置遙測訊息和事件傳送到內建端點和自訂端點。 可以路由傳送的事件包括裝置生命週期事件、裝置對應項變更事件、數位對應項變更事件,以及裝置連線狀態事件。
路由傳送之前篩選資料,方法是套用豐富查詢。 訊息路由可讓您對訊息屬性和訊息本文,以及裝置對應項標記和裝置對應項屬性進行查詢。 如需詳細資訊,請參閱訊息路由中的查詢。
IoT 中樞會針對所有裝置到雲端訊息定義常見格式,以在通訊協定之間提供互通性。 如需詳細資訊,請參閱建立及讀取 IoT 中樞訊息。
注意
本文中提及的某些功能 (例如雲端對裝置傳訊、裝置對應項和裝置管理) 僅適用於 IoT 中樞的標準層。 如需有關基本和標準/免費 Azure IoT 中樞階層的詳細資訊,請參閱為您的解決方案選擇適合的 IoT 中樞階層。
路由端點
每個 IoT 中樞都有與事件中樞相容的預設路由端點 (名為訊息/事件)。 您也可以建立指向 Azure 訂用帳戶中其他服務的自訂端點。
IoT 中樞目前針對訊息路由支援下列端點:
- 內建端點
- 儲存體容器
- 服務匯流排佇列
- 服務匯流排主題
- 事件中樞
- Cosmos DB
如需各個端點的詳細資訊,請參閱 IoT 中樞端點。
每個訊息都會路由傳送至其相符路由查詢的所有端點,這表示訊息可以路由傳送至多個端點。 如果訊息符合多個指向相同端點的路由,則 IoT 中樞只會將訊息傳遞至該端點一次。
IoT 中樞需要具有對這些服務端點的寫入權限才能使訊息路由運作。 如果您透過 Azure 入口網站設定您的端點,則會為您新增必要的權限。 如果您使用 PowerShell 或 Azure CLI 設定端點,則必須提供寫入存取權限。
若要了解如何建立端點,請參閱下列文章:
請務必設定您的服務,以支援預期的輸送量。 例如,如果您使用事件中樞作為自訂端點,必須設定該事件中樞的輸送量單位,以便處理您打算透過 IoT 中樞訊息路由傳送的事件輸入。 同樣地,使用服務匯流排佇列作為端點時,必須設定大小上限,以確保佇列可以保留所有輸入的資料,直到由取用者輸出為止。 第一次設定 IoT 解決方案時,您可能必須監視其他端點,並對實際負載進行必要的調整。
如果您的自訂端點有防火牆設定,請考慮使用 Microsoft 信任的第一方例外狀況。
路由傳送至另一個訂用帳戶中的端點
如果端點資源位於與您的 IoT 中樞不同的訂用帳戶中,您必須先將 IoT 中樞設定為受信任的 Microsoft 服務,再建立自訂端點。 當您建立自訂端點時,請將驗證類型設定為使用者指派的身分識別。
如需詳細資訊,請參閱從 IoT 中樞輸出連線到其他 Azure 資源。
路由查詢
IoT 中樞訊息路由提供查詢功能,在將資料路由傳送到端點前先篩選資料。 您設定的每個路由查詢都具有下列屬性:
屬性 | 描述 |
---|---|
名稱 | 可識別查詢的唯一名稱。 |
來源 | 要據以處理的資料串流來源。 例如裝置遙測。 |
Condition | 適用於路由查詢的查詢運算式,會針對訊息應用程式屬性、系統屬性、訊息內文、裝置對應項標記和裝置對應項屬性來執行,以判斷它是否符合端點。 |
端點 | IoT 中樞傳送符合查詢之訊息的目的地端點名稱。 我們建議選擇與您 IoT 中樞位於相同區域的端點。 |
單一訊息可能符合多個路由查詢的條件,在這種情況下,IoT 中樞會將訊息傳遞至與每個相符查詢相關聯的端點。 IoT 中樞也會自動刪除重複的訊息傳遞,因此,如果訊息符合多個具有相同目的地的查詢,該訊息就只會寫入到該目的地一次。
如需詳細資訊,請參閱 IoT 中樞訊息路由查詢語法。
讀取已路由傳送的資料
下列文章可用來了解如何從端點讀取訊息。
後援路由
後援路由會將與任何現有路由查詢條件不符的所有訊息,傳送至與事件中樞相容的內建端點 (訊息/事件)。 如果訊息路由已啟用,您即可啟用後援路由功能。 除非建立通向該端點的路由,否則在建立路由後,資料會停止流向內建端點。 如果內建端點沒有路由,而且後援路由已啟用,則與路由的任何查詢條件不符的訊息會傳送至內建端點。 即使刪除所有的現有路由,必須啟用後援路由功能,才能接收內建端點的所有資料。
您可以在 Azure 入口網站的 [訊息路由] 刀鋒視窗中啟用或停用後援路由。 您也可以對於 FallbackRouteProperties 使用 Azure 資源管理員來使用後援路由的自訂端點。
非遙測事件
除了裝置遙測之外,訊息路由也會啟用傳送非遙測事件,包括:
- 裝置對應項變更事件
- 裝置生命週期事件
- 裝置作業生命週期事件
- 數位分身變更事件
- 裝置連線狀態事件
例如,如果隨同設定為裝置對應項變更事件的資料來源建立路由,IoT 中樞會將訊息傳送至包含裝置對應項變更的端點。 同樣地,如果建立資料來源設為裝置生命週期事件的路由,IoT 中樞會傳送訊息,指出是否已刪除或建立裝置或模組。 如需裝置生命週期事件的詳細資訊,請參閱裝置和模組生命週期通知。
使用 Azure IoT 隨插即用時,開發人員可以建立資料來源設為數位對應項變更事件的路由,而且每當設定或變更數位對應項屬性、取代數位對應項,或是基礎裝置對應項發生變更事件時,IoT 中樞就會傳送訊息。 最後,如果建立資料來源設為裝置連線狀態事件的路由,IoT 中樞會傳送訊息,指出裝置是否已連線或中斷連線。
IoT 中樞也與 Azure Event Grid 整合發佈裝置事件,以根據這些事件支援即時整合和工作流程自動化。 請參閱訊息路由與事件格線之間的關鍵差異了解何者最適合您的情況。
裝置連線狀態事件的限制
裝置線上狀態事件適用於使用 MQTT 或 AMQP 通訊協定連線的裝置,或使用透過 WebSocket 的其中一種通訊協定。 僅使用 HTTPS 提出的要求不會觸發裝置線上狀態通知。 若要讓 IoT 中樞開始傳送裝置線上狀態事件,開啟連線之後,裝置必須呼叫 cloud-to-device receive message 作業或 device-to-cloud send telemetry 作業。 在 Azure IoT SDK 之外,在 MQTT 中這些作業等同於對應傳訊主題上的 SUBSCRIBE 或 PUBLISH 作業。 透過 AMQP,這些作業等同於在適當的連結路徑上附加或傳輸訊息。 如需詳細資訊,請參閱下列文章:
IoT 中樞不會報告每個個別裝置的連線和中斷連線事件,而是發佈定期 60 秒快照集上取得的目前連線狀態。 接收到具有不同序號或不同連線狀態事件的相同連線狀態事件,都表示裝置連線狀態在 60 秒期間發生變更。
測試路由
當您建立新的路由或編輯現有的路由時,您應使用範例訊息來測試路由查詢。 您可以測試個別的路由,或一次測試所有的路由,而且測試期間不會將任何訊息路由傳送到端點。 Azure 入口網站、Azure Resource Manager、Azure PowerShell 和 Azure CLI 均可用於測試。 結果有助於識別範例訊息符合或不符合查詢,或是否由於範例訊息或查詢語法不正確而無法執行測試。 若要深入了解,請參閱測試路由和測試所有路由。
Latency
當您路由傳送裝置到雲端的遙測訊息時,在建立第一個路由之後,端對端延遲會稍微增加。
在大部分情況下,平均增加的延遲會少於 500 毫秒。 不過,您遭遇的延遲情況可能不同,而且視 IoT 中樞和解決方案架構的層級而定,延遲可能會更高。 您可以使用路由:訊息/事件的訊息延遲或 d2c.endpoints.latency.builtIn.events IoT 中樞計量來監視延遲。 建立或刪除第一個之後的任何路由並不會影響端對端延遲。
監視和疑難排解
IoT 中樞提供幾個路由和端點相關計量,以便您概略了解中樞的健全狀況和傳送的訊息。 您也可以使用 IoT 中樞資源記錄中的 [路由] 類別,追蹤評估路由查詢和端點健全狀況時所發生的錯誤。 若要深入了解如何搭配使用計量和資源記錄與 IoT 中樞,請參閱監視 Azure IoT 中樞。
您可以使用 REST API 取得端點健康情況來取得端點的健全狀態。
如需詳細資料和疑難排解路由的支援,請使用路由疑難排解指南。