共用方式為


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

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

必要條件

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

啟動 Cloud Shell

  1. 登入 Azure 入口網站

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

  3. 切換至Bash。

    顯示 Cloud Shell 開啟且已選取 Bash Azure 入口網站 的螢幕快照。

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

若要在命名空間中建立 Event Grid 命名空間和主題,請將下列腳本複製到編輯器,以實際值取代佔位元,然後執行命令。

預留位置 註解
RESOURCEGROUPNAME 指定要建立之資源群組的名稱。
EVENTGRIDNAMESPACENAME 指定 Event Grid 命名空間的名稱。
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

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

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

預留位置 註解
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

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

若要為您稍早建立的命名空間主題建立事件訂用帳戶,請以實際值取代佔位符,然後執行下列命令。 此訂用帳戶已設定為使用事件中樞作為事件處理程式。

預留位置 註解
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 訊息。

預留位置 註解
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 事件中樞 的數據 - Azure 事件中樞 |Microsoft Learn。 您可以在查詢中看到 MQTT 訊息。

顯示事件中樞中 MQTT 訊息資料的螢幕快照,方法是使用串流分析查詢工具。

下一步

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