在 Azure 事件方格中路由 MQTT 訊息
事件方格可讓您將 MQTT 訊息路由至 Azure 服務或 Webhook,以進一步處理。 因此,您可以在資料分析、儲存和視覺效果,以及其他使用案例中使用 IoT 資料,建置端對端解決方案。
如何使用路由功能?
將訊息從您的用戶端路由至 Azure 服務或自訂端點,可讓您將此資料的優點最大化。 以下是利用此功能的一些使用案例:
- 資料分析:擷取和分析來自用戶端的路由訊息,以最佳化您的解決方案。 例如,分析機器的遙測,以預測在發生失敗前何時排程維護,以避免延遲和進一步的損壞。
- 無伺服器應用程式:根據來自用戶端的路由訊息觸發無伺服器函式。 例如,當動作感應器偵測到動作時,將通知傳送給安全性人員以解決此問題。
- 資料視覺效果:從用戶端建置路由資料的視覺效果,以輕鬆呈現和了解資料,以及突顯趨勢和極端值。
路由設定:
路由設定可讓您將所有 MQTT 訊息從用戶端傳送至事件方格命名空間主題或事件方格自訂主題。 訊息進入主題之後,您可以設定事件訂閱來取用主題中的訊息。 使用下列高階步驟來達成此設定:
- 命名空間主題作為路由目的地:
- 建立事件方格命名空間主題,其中所有 MQTT 訊息皆已路由。
- 建立推送類型的事件訂用帳戶,以將這些訊息路由至其中一個支援的 Azure 服務或自訂 Webhook 或佇列類型的事件訂用帳戶,以透過您的應用程式直接從命名空間主題提取訊息。
- 設定路由設定,參考您在第一個步驟中建立的主題。
- 自訂主題作為路由目的地:
- 建立事件方格自訂主題,其中所有 MQTT 訊息皆已路由。 本主題必須滿足路由的事件方格自訂主題需求
- 建立事件方格事件訂用帳戶,以將這些訊息路由至其中一個支援的 Azure 服務或自訂端點。
- 設定路由設定,參考您在第一個步驟中建立的主題。
注意
停用命名空間上的公用網路存取會導致 MQTT 路由失敗。
命名空間主題和自訂主題作為路由目的地之間的差異
下表顯示命名空間主題和自訂主題作為路由目的地之間的差異。 如需每個事件方格資源中包含哪些配額和限制的詳細明細,請參閱配額和限制。
比較點 | 命名空間主題 | 自訂主題 |
---|---|---|
輸送量 | 高,最高 40 MB/秒 (輸入) 和 80 MB/秒 (輸出) | 低,最高 5 MB/秒 (輸入和輸出) |
提取傳遞 | Yes | |
推送傳遞至事件中樞 | Yes | Yes |
推送傳遞至 Azure 服務 (Functions、Webhook、服務匯流排佇列和主題、轉送混合式連線和儲存體佇列) | Yes | |
訊息保留期 | 7 天 | 1 天 |
角色指派需求 | 不需要,因為 MQTT 訊息代理程式和命名空間主題位於相同的命名空間下 | 必要,因為裝載 MQTT 訊息代理程式功能和自訂主題的命名空間是不同的資源 |
路由的事件方格自訂主題需求
用於路由的事件方格自訂主題必須符合下列需求:
- 必須設定為使用雲端事件結構描述 v1.0
- 必須位於與命名空間相同的區域中。
- 您必須將「事件方格資料傳送者」角色指派給自己,或指派給事件方格自訂主題上選取的受控識別,才能套用路由設定。
- 在入口網站中,移至已建立的事件方格主題資源。
- 在 [存取控制 (IAM)] 功能表項目中,選取 [新增角色指派]。
- 在 [角色] 索引標籤中,選取 [事件方格資料傳送者],然後選取 [下一步]。
- 在 [成員] 索引標籤中,選取 [+選取成員],然後在出現的 [選取] 方塊中輸入您的 AD 使用者名稱 (例如,user@contoso.com)。
- 選取您的 AD 使用者名稱,然後選取 [檢閱 + 指派]
Azure 入口網站設定
使用下列步驟設定路由:
- 在 Azure 入口網站中,移至您的命名空間。
- 在 [路由] 下,檢查 [啟用路由]。
- 在主題類型底下,選取 [命名空間主題] 或 [自訂主題]
- 在主題底下,選取您已建立的主題,其中所有 MQTT 訊息皆已路由。
- 針對自訂主題,清單只會顯示滿足路由的事件方格自訂主題需求的主題
- 如果已選取自訂主題,[傳遞的受控識別] 區段隨即顯示。 針對將 MQTT 訊息傳遞至自訂主題時,會用來驗證 MQTT 代理的身分識別,選取下列其中一個選項:
- 無:在此案例中,您必須在自訂主題上將「事件方格資料傳送者」角色指派給自己。
- 系統指派的身分識別:在此情況下,您必須在命名空間上啟用系統指派的身分識別作為必要條件,並將「EventGrid 資料傳送者」角色指派給自訂主題上的系統指派身分識別。
- 使用者指派的身分識別:在此情況下,您必須在命名空間上啟用使用者指派的身分識別作為必要條件,並將「EventGrid 資料傳送者」角色指派給自訂主題上選取的身分識別。
- 如果已選取 [使用者指派的身分識別],則會出現下拉式清單,讓您選取所需的身分識別。
- 選取套用。
如需擴充設定指示,請移至擴充入口網站設定。
Azure CLI 設定
az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json
NS.json
"properties": {
"inputSchema": "CloudEventSchemaV1_0",
"topicSpacesConfiguration": {
"state": "Enabled",
"routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
"routingIdentityInfo": {
"type": "UserAssigned", //Allowed values: None, SystemAssigned, UserAssigned
"userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
},
}
}
如需擴充設定指示,請移至擴充 CLI 設定。
MQTT 訊息路由行為
將 MQTT 訊息路由至自訂主題時,事件方格會提供持久傳遞,因為它會嘗試立即傳遞每個訊息至少一次。 如果失敗,事件方格會重試傳遞,或捨棄要路由的訊息。 事件方格不保證事件傳遞的順序,因此訂閱者可能會依序接收它們。
下表描述根據不同錯誤進行 MQTT 訊息路由的行為。
錯誤 | 錯誤描述 | 行為 |
---|---|---|
TopicNotFoundError | 已刪除設定要接收所有 MQTT 路由訊息的自訂主題。 | 事件方格會捨棄要路由的 MQTT 訊息。 |
AuthenticationError | 已刪除設定為 MQTT 路由訊息目的地的自訂主題之事件方格資料傳送者角色。 | 事件方格會捨棄要路由的 MQTT 訊息。 |
TooManyRequests | 每秒的 MQTT 路由訊息數目超過自訂主題的發佈限制。 | 事件方格會重試以路由 MQTT 訊息。 |
ServiceError | 由於伺服器作業原因發生未預期的伺服器錯誤。 | 事件方格會重試以路由 MQTT 訊息。 |
重試期間,事件方格會針對 MQTT 訊息路由使用指數輪詢重試原則。 事件方格會以最佳方式重試下列排程的傳遞:
- 10 秒
- 30 秒
- 1 分鐘
- 5 分鐘
- 10 分鐘
- 30 分鐘
- 1 小時
- 3 小時
- 6 小時
- 每 12 小時
如果已排入佇列以進行重新傳遞的路由 MQTT 訊息成功,事件方格會嘗試以最佳方式從重試佇列移除訊息,但可能仍會收到重複項目。
後續步驟:
使用下列文章以深入了解路由: