Event Grid 讓你能將 MQTT 訊息路由到 Azure 服務或 webhook 進行進一步處理。 透過路由這些資料,你可以打造端對端解決方案,利用物聯網資料進行分析、儲存與視覺化。
本文說明何時使用路由,並示範如何將路由設定為事件網格命名空間主題或自訂主題。
何時使用路由
將客戶訊息路由至 Azure 服務或自訂端點,能最大化這些資料的效益。 以下列表描述了此功能的多種使用情境:
- 資料分析:從客戶那裡擷取並分析路由訊息,以優化您的解決方案。 例如,分析機器的遙測數據,預測何時該在故障發生前安排維護,以避免延誤與進一步損害。
- 無伺服器應用程式:根據客戶端路由的訊息觸發無伺服器函式。 例如,當動作感應器偵測到動作時,應通知保全人員處理。
- 資料視覺化:建立客戶路由資料的視覺化,以呈現並理解數據,並突顯趨勢與異常值。
設定路由
路由設定讓你能將所有客戶端的 MQTT 訊息傳送到事件 網格命名空間主題 或 事件網格自訂主題。 在訊息位於主題中之後,您可以設定事件訂用帳戶,以取用主題中的訊息。 請依照以下高階步驟達成此配置:
- 將命名空間主題設為路由目標:
- 建立一個事件網格命名空間主題 ,讓事件網格路由所有 MQTT 訊息。
- 建立推送型事件訂閱,將這些訊息導向支援的 Azure 服務或自訂 webhook,或建立隊列型事件訂閱,直接透過應用程式從命名空間主題拉取訊息。
- 設定與你第一步建立主題相關的 路由配置 。
- 自訂主題作為路由目的地:
- 建立一個 Event Grid 自訂主題 ,讓 Event Grid 路由所有 MQTT 訊息。 此主題需符合 事件網格自訂主題路由需求。
- 建立 事件網格事件訂閱 ,將這些訊息路由到支援的 Azure 服務或自訂端點。
- 設定與你第一步建立主題相關的 路由配置 。
備註
停用命名空間上的公共網路存取會導致 MQTT 路由失敗。
命名空間主題與自訂主題作為路由目的地的差異
下表展示了命名空間主題與自訂主題作為路由目的地的差異。 關於每個事件網格資源包含的詳細配額與限制,請參見 配額與限制。
| 比較點 | 命名空間主題 | 自訂主題 |
|---|---|---|
| Throughput | 高速,最高可達 40 MB/s(入口)及 80 MB/s(出口) | 低,最高可達 5 MB/s (輸入與輸出) |
| 接收傳遞 | 是的 | No |
| 推送傳遞至事件中樞 | 是的 | 是的 |
| 推送傳遞至 Azure 服務 (Functions、Webhooks、服務匯流排佇列與主題、Relay 混合式連線,以及儲存體佇列) | No | 是的 |
| 訊息保留期 | 7 天 | 1 天 |
| 角色指派要求 | 不需要,因為 MQTT broker 和命名空間主題屬於同一個命名空間 | 必須,因為承載 MQTT 代理功能的命名空間與自訂主題是不同的資源 |
用於路由的事件方格自訂主題需求
你用來路由的 Event Grid 自訂主題需要符合以下要求:
- 它需要使用 CloudEvents 架構 v1.0。
- 它必須與命名空間位於同一區域。
- 你需要在套用路由設定前,先將 事件網格資料發送 者角色指派給自己或事件網格自訂主題中所選的管理身份。 若要指派角色:
- 在入口網站中,前往你建立的事件網格主題資源。
- 在 存取控制(IAM) 選單中,選擇 新增角色指派。
- 在 角色 標籤中,選擇 事件網格資料發送器,然後選擇 下一步。
- 在「會員」分頁,選擇「選擇成員」,然後在出現的「選擇」框中輸入你的 Microsoft Entra 使用者名稱(例如,
user@contoso.com)。 - 選擇你的 Microsoft Entra 使用者名稱,然後選擇檢視 + 指派。
Azure 入口網站組態
要設定路由:
- 在 Azure 入口網站中,移至您的命名空間。
- 在 路由中選擇 啟用路由。
- 在主題 類型中,選擇 命名空間主題 或 自訂主題。
- 對於 主題,選取你所建立、所有 MQTT 訊息都會路由至該處的主題。
- 對於自訂主題,清單僅顯示符合 事件網格自訂主題路由需求的主題。
- 如果你選擇自訂主題,就會顯示「 傳送的管理身份 」區塊。 請為身分識別選擇下列其中一個選項,在 MQTT 代理將 MQTT 訊息傳送至自訂主題時進行驗證:
- 無:在自訂主題中,將 事件網格資料發送 者角色指定給自己。
- 系統指派身分:先決條件是先在命名空間上啟用系統指派身分,並在自訂主題上將 Event Grid 資料傳送者 角色指派給系統指派身分。
- 使用者指派身份: 先在命名空間啟用使用者指派身份 作為前提,並將事件 網格資料發送 者角色指派給自訂主題中所選身份。 如果你選擇 使用者指派身份,會出現一個下拉選單,讓你可以選擇該身份。
- 選取 ,然後套用。
關於擴充配置的說明,請前往擴充 平台設置。
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",
"userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>"
}
}
}
}
在 routingIdentityInfo中, type 接受 None、 SystemAssigned或 UserAssigned。 僅當 UserAssigned 為 userAssignedIdentity 時,才設定 type。
關於增強配置的設定說明,請前往 增強 CLI 配置。
MQTT 訊息路由行為
在將 MQTT 訊息路由至自訂主題時,Event Grid 提供持久傳遞,因為它嘗試至少立即送達每則訊息 一次 。 如果發生失敗,事件網格會重試傳送或丟棄原本要用來路由的訊息。 Event Grid不保證事件傳遞的順序,因此訂閱者可能會接收到無序的事件。
下表說明根據不同錯誤,MQTT 訊息路由的行為。
| 錯誤 | 錯誤描述 | 行為 |
|---|---|---|
| 主題未找到錯誤 | 原本設定接收所有 MQTT 路由訊息的自訂主題已被刪除。 | Event Grid 會丟棄原本用於路由的 MQTT 訊息。 |
| 認證錯誤 | 設定為 MQTT 路由訊息目的地的自訂主題的事件網格資料發送者角色已被刪除。 | Event Grid 會丟棄原本用於路由的 MQTT 訊息。 |
| 請求過多 | 每秒 MQTT 路由訊息數量超過自訂主題的發佈限制。 | Event Grid 會重新嘗試路由 MQTT 訊息。 |
| 服務錯誤 | 伺服器因操作原因而發生的意外錯誤。 | Event Grid 會重新嘗試路由 MQTT 訊息。 |
在重試時,Event Grid 會使用指數退避重試策略來執行 MQTT 訊息路由。 事件方格會依下列排程以盡力而為的方式重試傳遞:
- 10 秒
- 30 秒
- 1 分鐘
- 5 分鐘
- 10 分鐘
- 30分鐘
- 1 小時
- 3 小時
- 6 小時
- 每 12 小時一班
如果一個已路由的 MQTT 訊息在等待重投時成功,Event Grid 會嘗試以最佳方式將該訊息從重試隊列中移除,但你仍可能收到重複訊息。