共用方式為


Azure IoT 作業內建的本機 MQTT 訊息代理程式

重要

此頁面包含使用 Kubernetes 部署指令清單來管理 Azure IoT Operations 元件的指示,其處於預覽狀態。 這項功能隨附 數個限制,不應用於生產工作負載。

請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

Azure IoT 作業包含符合企業級和標準的 MQTT 訊息代理程式。 MQTT 訊息代理程式可調整、高可用性和 Kubernetes 原生。 它提供 IoT 營運的訊息傳遞層,可啟用邊緣與雲端之間的雙向通訊,並在邊緣支援事件驅動應用程式。

MQTT 合規性

MQTT 是IoT空間中的常見通訊協定。 其簡單的設計允許單一代理商能同時為數千個用戶端提供服務,並且創建和管理簡約的發行-訂閱主題。 許多IoT裝置原生支援 MQTT。 下游轉譯網關會將各種IoT通訊協定轉換成 MQTT。

MQTT 訊息代理程式支援IoT作業中的傳訊層,並與 MQTT v3.1.1 和 MQTT v5 相容。 如需支援 MQTT 功能的詳細資訊,請參閱 MQTT 代理程式中的 MQTT 功能支援

架構

MQTT 訊息代理程式有兩個主要層:

  • 無狀態前端層
  • 具狀態和分區化後端層

前端層會處理用戶端連線和要求,並將其路由傳送至後端。 後端層會依索引鍵分割數據,例如用戶端會話的用戶端標識碼,以及主題訊息的主題名稱。 後端層會使用鏈結複寫來複製每個分割區中的數據。

架構的目標如下:

  • 容錯和隔離:如果後端 Pod 失敗,訊息發佈會繼續,而且失敗不會傳播到系統的其餘部分。
  • 失敗復原:自動失敗復原而不需作員介入。
  • 沒有訊息遺失:如果分割區中至少有一個前端 Pod 和一個後端 Pod 正在執行,則會傳遞訊息。
  • 彈性擴展:發佈和訂閱輸送量的水平擴展支援用於邊緣和雲端部署。
  • 一致效能在大規模下的維持:透過鏈式複製來限制訊息延遲的額外負荷。
  • 作簡單性:減少對外部元件的相依性,以簡化維護和複雜性。

組態

針對設定,MQTT 訊息代理程式會使用數個 Kubernetes 自定義資源來定義訊息代理程式行為和功能的不同層面:

  • 主要資源是 Broker,其會定義全域設定,例如基數、記憶體使用量配置檔和診斷設定。
  • Broker 資源最多可以有三 個 BrokerListeners,每個資源都會接聽指定服務類型 (NodePortLoadBalancerClusterIP) 上的傳入 MQTT 連線。 每個 BrokerListener 資源可以有多個埠。
  • BrokerListener 資源中的每個埠都可以與 BrokerAuthentication 資源和 BrokerAuthorization 資源相關聯。 這些驗證和授權原則會決定哪些用戶端可以連線到埠,以及他們可以在訊息代理程式上執行的動作。

Broker 與 BrokerListener 之間的關聯性是 一對多,而 BrokerListener 與 BrokerAuthentication/BrokerAuthorization 之間的關聯性是 多對多。 這些資源的實體關聯性圖表如下:

顯示訊息代理程序資源模型的圖表。

根據預設,IoT 作業會 部署預設 Broker預設 BrokerListener預設 BrokerAuthentication。 所有這些資源都會命名為 default。 這些資源一起提供IoT作業運作所需的基本 MQTT 訊息代理程式設定。 預設設定為:

此圖顯示預設訊息代理程序資源及其之間的關聯性。

重要

為了避免中斷IoT作業內部元件之間的通訊,請勿修改任何預設組態。

若要自定義 MQTT 訊息代理程式部署,請將 BrokerListeners、BrokerAuthentication 和 BrokerAuthorization 等新資源新增至預設 Broker。

Broker 資源是不可變的,無法在部署之後修改,但只有在進階案例中才需要自定義。 若要深入瞭解自定義 Broker 資源,請參閱 自定義預設 Broker

在完整部署中,您可以有多個 BrokerListeners,每個埠都有多個埠,而且每個埠可以有相關聯的不同 BrokerAuthentication 和 BrokerAuthorization 資源。

例如,從預設設定開始,您可以新增:

  • 名為 example-lb-listener 的 LoadBalancer BrokerListener,具有兩個埠 1883 和 8883。
  • 名為 example-nodeport-listener 的 NodePort BrokerListener,具有單一埠 1884 (nodePort 31884)。
  • 具有自定義驗證方法的 BrokerAuthentication 資源,名為 example-authn
  • 具有自定義授權設定的 BrokerAuthorization 資源 example-authz

如果您使用相同的 BrokerAuthentication 和 BrokerAuthorization 資源來設定所有新的埠,安裝程式看起來會像這樣:

此圖顯示每個代理程式的完整自定義代理程式部署和關聯性。

此方法會保持預設設定完整,並可讓您新增資源以自訂 MQTT broker 的部署。

默認 Broker 資源

每個 IoT 作業部署只能有一個訊息代理程式,而且必須命名 為預設值。 IoT 作業需要預設的訊息代理程序資源才能運作。 這是不可變的,無法在部署後修改。

警告

請勿刪除預設仲介資源。 這樣做會中斷IoT作業內部元件之間的通訊,而部署會停止運作。

自定義預設 Broker

大部分的設定不需要自訂預設代理程序資源。 需要自訂的設定包括:

  • 基數:判斷訊息代理程序處理更多連線和訊息的容量,並在Pod或節點失敗時增強高可用性。
  • 記憶體配置檔:設定訊息代理程式的最大記憶體使用量,以及如何在訊息代理程式相應增加時處理記憶體使用量。
  • 磁碟支援的訊息緩衝區:當 RAM 填滿時,將訊息緩衝處理至磁碟的設定。
  • 診斷設定:診斷設定,例如記錄層級和計量端點。
  • 進階 MQTT 用戶端選項:設定進階 MQTT 用戶端選項,例如會話到期、訊息到期和保持運作設定。
  • 內部流量加密:設定,以加密訊息代理程式前端與後端 Pod 之間的內部流量。

您只能在初始部署期間自定義預設代理程式,方法是使用 Azure CLI 或 Azure 入口網站。 如果您需要不同的訊息代理程式組態設定,則需要新的部署。

若要在部署期間自定義預設 Broker:

當您遵循部署 IoT作業的指南時,請在 [ 組態 ] 區段中查看 MQTT 訊息代理程式設定您可以在這裏自訂基數和記憶體設定檔設定。 若要設定其他設定,包括磁碟支援的訊息緩衝區和進階 MQTT 用戶端選項,請使用 Azure CLI。

重要

在初始部署之後,您無法更新代理資源。 部署后不允許對基數、記憶體配置檔或磁碟緩衝區進行設定變更。

因應措施是在使用 az iot ops init 命令部署 Azure IoT 操作時,使用 MQTT 代理程式 JSON 設定檔來包含 --broker-config-file 參數。 如需詳細資訊,請參閱進階 MQTT 代理程式設定設定核心 MQTT 代理程式設定

檢視預設 Broker 設定

若要檢視預設訊息代理程式的設定:

  1. 在 Azure 入口網站 中,移至您的 IoT 作業實例。
  2. 在 [元件] 底下,選取 [MQTT Broker]。
  3. 在 [訊息代理程序詳細數據] 底下,選取 [JSON 檢視]。