共用方式為


教學課程:使用命名空間主題將 MQTT 訊息路由傳送至 Azure 事件中樞 (Azure CLI)

在本教學課程中,您將瞭解如何使用命名空間主題,將資料從 MQTT 用戶端路由傳送至 Azure 事件中樞。 以下是高階步驟:

先決條件

  • 如果您沒有 Azure 訂用帳戶,請在開始之前建立 Azure 免費帳戶
  • 如果您是事件方格的新手,請先閱讀 事件方格概觀 ,再開始本教學課程。
  • 根據 註冊事件方格資源提供者中的步驟註冊事件方格資源提供者。
  • 請確定防火牆中的連接埠 8883 已開啟。 本教學課程中的範例使用 MQTT 通訊協定,該通訊協定透過連接埠 8883 進行通訊。 此埠可能會在某些企業和教育網路環境中遭到封鎖。

啟動 Cloud Shell

  1. 登入 Azure 入口網站

  2. 選取連結以啟動 Cloud Shell。

  3. 切換到 Bash。

    此螢幕擷取畫面顯示 Azure 入口網站,其中 Cloud Shell 已開啟且選擇了 Bash。

建立事件方格命名空間和主題

若要在命名空間中建立事件方格命名空間和主題,請將下列腳本複製到編輯器,將預留位置取代為實際值,然後執行命令。

Placeholder 評論
RESOURCEGROUPNAME 指定要建立之資源群組的名稱。
EVENTGRIDNAMESPACENAME 指定事件方格命名空間的名稱。
REGION 指定您要在其中建立資源的位置。
NAMESPACETOPICNAME 指定命名空間主題的名稱。
rgName="RESOURCEGROUPNAME"
nsName="EVENTGRIDNAMESPACENAME"
location="REGION"
nsTopicName="NAMESPACETOPICNAME"

az group create -n $rgName -l $location
az eventgrid namespace create -g $rgName -n $nsName -l $location --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
az eventgrid namespace topic create -g $rgName --name $nsTopicName --namespace-name $nsName

建立事件中樞命名空間和事件中樞

若要在命名空間中建立事件中樞命名空間和事件中樞,請將預留位置取代為實際值,然後執行下列命令。 此事件中樞會做為您在本教學課程中建立的事件訂用帳戶中的事件處理常式。

Placeholder 評論
EVENTHUBSNAMESPACENAME 指定要建立的事件中樞命名空間名稱。
EVENTHUBNAME 指定要在事件中樞命名空間中建立的事件中樞執行個體 (事件中樞) 名稱。
ehubNsName="EVENTHUBSNAMESPACENAME`"
ehubName="EVENTHUBNAME"

az eventhubs namespace create --resource-group $rgName --name $ehubNsName
az eventhubs eventhub create --resource-group $rgName --namespace-name $ehubNsName --name $ehubName

授與事件方格命名空間將事件傳送至事件中樞的存取權

執行下列命令,將事件方格命名空間的服務主體新增至事件中樞命名空間上的 Azure 事件中樞資料傳送者角色。 它可讓事件方格命名空間及其中的資源將事件傳送至事件中樞命名空間中的事件中樞。

egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
namespaceresourceid=$(az eventhubs namespace show -n $ehubNsName -g $rgName --query "{I:id}" -o tsv) 

az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "Azure Event Hubs Data Sender" --scope $namespaceresourceid

建立以事件中樞作為端點的事件訂用帳戶

若要為您先前建立的命名空間主題建立事件訂閱,請將預留位置取代為實際值,然後執行下列命令。 此訂閱已設定為使用事件中樞作為事件處理器。

Placeholder 評論
EVENTSUBSCRIPTIONNAME 指定命名空間主題之事件訂閱的名稱。
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
eventhubresourceid=$(az eventhubs eventhub show -n $ehubName --namespace-name $ehubNsName -g $rgName --query "{I:id}" -o tsv) 

az resource create --api-version 2023-06-01-preview --resource-group $rgName --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $eventSubscriptionName --parent namespaces/$nsName/topics/$nsTopicName --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventhubresourceid\"}}}}}}"

在事件方格命名空間中設定路由

執行下列命令,以在命名空間上啟用路由,以將訊息或事件路由至您先前建立的命名空間主題。 該命名空間主題上的事件訂閱會將這些事件轉送至設定為事件處理常式的事件中樞。

routeTopicResourceId=$(az eventgrid namespace topic show -g $rgName --namespace-name $nsName -n $nsTopicName --query "{I:id}" -o tsv) 
az eventgrid namespace create -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$routeTopicResourceId}"

客戶端、主題空間及許可權綁定

現在,建立用戶端來傳送一些訊息進行測試。 在此步驟中,您會建立用戶端、具有主題的主題空間,以及發佈者和訂閱者連結。

如需詳細指示,請參閱 快速入門:使用 Azure CLI 在事件方格命名空間上發佈和訂閱 MQTT 訊息

Placeholder 評論
CLIENTNAME 指定傳送一些測試訊息的用戶端名稱。
CERTIFICATETHUMBPRINT 用戶端憑證的指紋。 請參閱上述快速入門,以取得建立憑證和擷取指紋的指示。 在 MQTTX 工具中使用相同的指紋來傳送測試訊息。
TOPICSPACENAME 指定要建立之主題空間的名稱。
PUBLSHERBINDINGNAME 指定發行者繫結的名稱。
SUBSCRIBERBINDINGNAME 指定訂閱者繫結的名稱。
clientName="CLIENTNAME"
clientAuthName="client1-authnID" 
clientThumbprint="CERTIFICATETHUMBPRINT"

topicSpaceName="TOPICSPACENAME"
publisherBindingName="PUBLSHERBINDINGNAME"
subscriberBindingName="SUBSCRIBERBINDINGNAME"

az eventgrid namespace client create -g $rgName --namespace-name $nsName -n $clientName --authentication-name $clientAuthName --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[$clientThumbprint]}"

az eventgrid namespace topic-space create -g $rgName --namespace-name $nsName -n $topicSpaceName --topic-templates ['contosotopics/topic1']

az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $publisherBindingName --client-group-name '$all' --permission publisher --topic-space-name $topicSpaceName

az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $subscriberBindingName --client-group-name '$all' --permission subscriber --topic-space-name $topicSpaceName

使用 MQTTX 傳送訊息

使用 MQTTX 傳送一些測試訊息。 如需逐步指示,請參閱快速入門:發佈和訂閱 MQTT 主題。

確認事件中樞在事件中樞命名空間的 [ 概觀 ] 頁面上收到這些訊息。

螢幕擷取畫面,顯示事件中樞的 [概觀] 頁面,其中包含傳入訊息計數。

使用串流分析查詢在事件中樞檢視已路由的 MQTT 訊息

在 Azure 入口網站中,瀏覽至事件訂用帳戶內的事件中樞執行個體 (事件中樞)。 使用 Azure Stream Analytics 來處理 Azure 事件中樞的資料。 如需詳細資訊,請參閱 使用串流分析處理來自 Azure 事件中樞的資料 - Azure 事件中樞 |Microsoft 學習。 您可以在查詢中看到 MQTT 訊息。

螢幕擷取畫面,顯示使用串流分析查詢工具在事件中樞中的 MQTT 訊息資料。

後續步驟

如需程式碼範例,請移 至此 GitHub 存放庫