Azure 事件方格 MQTT 訊息代理程式中的主題空間

主題空間透過一組主題範本代表多個主題。 主題範本擴充了 MQTT 主題過濾器,除了標準的 MQTT 萬用字元外,還支援變數。 每個主題空間代表同一組用戶端用來通訊的 MQTT 主題。

主題空間簡化了存取控制,讓你能同時授權發佈或訂閱一組主題,而不必為每個主題管理存取權限。 存取控制模型結合四種資源,授權客戶群發布或訂閱主題空間:

  • 用戶端:代表透過 MQTT 通訊的裝置或應用程式。
  • 用戶端群組:將需要對同一組 MQTT 主題具有相同存取權限的用戶端歸為一組。
  • 主題空間:將一個或多個主題範本分組,代表預期主題或主題篩選器。
  • 權限綁定:授權客戶群發佈或訂閱某主題空間的存取權。

欲了解更多資訊,請參閱 MQTT 用戶端的存取控制

本文說明 MQTT 主題篩選器、主題範本與主題空間配置如何協同運作,讓您能將相關主題分組並有效管理客戶端存取。

MQTT 主題過濾器

MQTT 主題過濾器是一種 MQTT 主題,可以包含一個或多個區段的萬用字元,以便匹配多個 MQTT 主題。 主題篩選器簡化了訂閱申請,因為一個主題篩選器可以匹配多個主題。

MQTT 代理支援 MQTT 規範中定義的所有 MQTT 萬用卡:

  • + 符合單一區段。 例如,主題過濾器 machines/+/alert 對應以下主題:
    • machines/temp/alert
    • machines/humidity/alert
  • # 符合主題結尾處的零或多個區段。 例如,主題過濾器 machines/# 對應以下主題:
    • machines
    • machines/temp
    • machines/humidity
    • machines/temp/alert

欲了解更多關於萬用字元的資訊,請參閱 MQTT 規範中的主題萬用卡

主題範本

主題範本除了支援 MQTT 萬用卡外,還擴充了 MQTT 主題過濾器,支援變數。 主題空間配置也提供細緻的存取控制,讓你能控制客戶端群組中每個客戶端發布或訂閱其主題的授權。 欲了解更多資訊,請參閱 主題範本如何提供細緻的存取控制

主題空間配置

一個主題空間最多可組合 10 個主題範本。 主題範本支援 MQTT 萬用字元(+#)及以下變數:

  • ${client.authenticationName}: 代表用戶端的認證名稱。 欲了解更多資訊,請參閱 客戶端元資料的關鍵術語
  • ${client.attributes.x}:代表客戶端建立或更新時指派給該屬性,其中 x 是屬性鍵的精確字串。 例如,若用戶端擁有屬性 area:section1,主題範本 area/${client.attributes.area}/telemetry 僅允許擁有該屬性的用戶端在 MQTT 主題 area/section1/telemetry上發佈。 欲了解更多資訊,請參閱 MQTT 用戶端

備註

  • 以 開頭的 $ 主題則保留給內部使用。
  • 變數可以代表一段的部分或整個段,但不能涵蓋超過一個段。 例如,主題範本 machines/${client.authenticationName|.factory1}/temp 符合的主題例如 machines/machine1.factory1/tempmachines/machine2.factory1/temp
  • 主題範本使用特殊字元 $|,視您使用的 Shell 而定,您可能需要將它們逸出。 例如,在 PowerShell 中,請如下列範例所示逸出這些字元:
    • "vehicles/${client.authenticationName|dollar}/#"
    • vehicles/${client.authenticationName"|"dollar}/#

若要在 Azure 入口網站或使用 Azure CLI 建立主題空間,請參閱「發佈並訂閱 MQTT 訊息」。 當你為主題空間命名時,請使用以下規則:

  • 主題空間名稱長度可為3到50字元。
  • 主題空間名稱可以包含字母數字和連字符(-),且不包含空格。

Azure 入口網站中主題空間設定的截圖。

以下 Azure CLI 範例建立一個包含兩個主題範本的主題空間:

az eventgrid namespace topic-space create -g myRG --namespace-name myNS -n myTopicSpace --topic-templates ['segment1/+/segment3/${client.authenticationName}', "segment1/${client.attributes.attribute1}/segment3/#"]

備註

主題空間配置更新可能需要幾分鐘才能完成。