Dela via


Självstudie: Använda namnområdesavsnitt för att dirigera MQTT-meddelanden till Azure Event Hubs (Azure CLI)

I den här självstudien får du lära dig hur du använder ett namnområdesavsnitt för att dirigera data från MQTT-klienter till Azure Event Hubs. Här är de övergripande stegen:

Förutsättningar

  • Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
  • Om du inte har använt Event Grid tidigare läser du Översikt över Event Grid innan du påbörjar den här självstudien.
  • Registrera Event Grid-resursprovidern enligt stegen i Registrera Event Grid-resursprovidern.
  • Kontrollera att port 8883 är öppen i brandväggen. Exemplet i den här självstudien använder MQTT-protokollet, som kommunicerar via port 8883. Den här porten kan blockeras i vissa företags- och utbildningsnätverksmiljöer.

Starta Cloud Shell

  1. Logga in på Azure-portalen.

  2. Välj länken för att starta Cloud Shell.

  3. Växla till Bash.

    Skärmbild som visar Azure-portalen med Cloud Shell öppet och Bash valt.

Skapa ett Event Grid-namnområde och ämne

Om du vill skapa ett Event Grid-namnområde och ett ämne i namnområdet kopierar du följande skript till en redigerare, ersätter platshållarna med faktiska värden och kör kommandona.

Platshållare Kommentarer
RESOURCEGROUPNAME Ange ett namn för den resursgrupp som ska skapas.
EVENTGRIDNAMESPACENAME Ange namnet på Event Grid-namnområdet.
REGION Ange den plats där du vill skapa resurserna.
NAMESPACETOPICNAME Ange ett namn för namnområdesavsnittet.
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

Skapa ett namnområde för Event Hubs och en händelsehubb

Om du vill skapa ett Event Hubs-namnområde och en händelsehubb i namnområdet ersätter du platshållarna med faktiska värden och kör följande kommandon. Den här händelsehubben används som händelsehanterare i den händelseprenumeration som du skapar i den här självstudien.

Platshållare Kommentarer
EVENTHUBSNAMESPACENAME Ange ett namn för Event Hubs-namnområdet som ska skapas.
EVENTHUBNAME Ange namnet på den Event Hubs-instans (händelsehubb) som ska skapas i Event Hubs-namnområdet.
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

Ge Event Grid-namnområdet åtkomst till att skicka händelser till händelsehubben

Kör följande kommando för att lägga till tjänstens huvudnamn för Event Grid-namnområdet i rollen Azure Event Hubs Data Sender i Event Hubs-namnområdet. Det gör att Event Grid-namnrymden och resurserna i den kan skicka händelser till händelsehubben i Event Hubs-namnområdet.

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

Skapa en händelseprenumeration med Event Hubs som slutpunkt

Om du vill skapa en händelseprenumeration för det namnområdesavsnitt som du skapade tidigare ersätter du platshållarna med faktiska värden och kör följande kommandon. Den här prenumerationen är konfigurerad för att använda händelsehubben som händelsehanterare.

Platshållare Kommentarer
EVENTSUBSCRIPTIONNAME Ange ett namn för händelseprenumerationen för namnområdesavsnittet.
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\"}}}}}}"

Konfigurera routning i Event Grid-namnområdet

Kör följande kommandon för att aktivera routning på namnområdet för att dirigera meddelanden eller händelser till det namnområdesavsnitt som du skapade tidigare. Händelseprenumerationen i det namnområdesavsnittet vidarebefordrar dessa händelser till den händelsehubb som har konfigurerats som händelsehanterare.

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}"

Klientklient, ämnesutrymme och behörighetsbindningar

Skapa nu en klient för att skicka några meddelanden för testning. I det här steget skapar du en klient, ett ämnesutrymme med ett ämne samt bindningar för utgivare och prenumeranter.

Detaljerade instruktioner finns i Snabbstart: Publicera och prenumerera på MQTT-meddelanden på ett Event Grid-namnområde med Azure CLI.

Platshållare Kommentarer
CLIENTNAME Ange ett namn för klienten som skickar några testmeddelanden.
CERTIFICATETHUMBPRINT Tumavtryck för klientens certifikat. I snabbstarten ovan finns instruktioner för att skapa ett certifikat och extrahera ett tumavtryck. Använd samma tumavtryck i MQTTX-verktyget för att skicka testmeddelanden.
TOPICSPACENAME Ange ett namn för det ämnesutrymme som ska skapas.
PUBLSHERBINDINGNAME Ange ett namn för utgivarbindningen.
SUBSCRIBERBINDINGNAME Ange ett namn för prenumerantbindningen.
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

Skicka meddelanden med MQTTX

Använd MQTTX för att skicka några testmeddelanden. Stegvisa instruktioner finns i snabbstarten: Publicera och prenumerera på ett MQTT-ämne.

Kontrollera att händelsehubben tog emot dessa meddelanden på sidan Översikt för event hubs-namnområdet.

Skärmbild som visar sidan Översikt för händelsehubben med inkommande meddelandeantal.

Visa dirigerade MQTT-meddelanden i Event Hubs med hjälp av en Stream Analytics-fråga

Gå till Event Hubs-instansen (händelsehubben) i din händelseprenumeration i Azure-portalen. Bearbeta data från din händelsehubb med hjälp av Stream Analytics. Mer information finns i Bearbeta data från Azure Event Hubs med Stream Analytics – Azure Event Hubs | Microsoft Learn. Du kan se MQTT-meddelandena i frågan.

Skärmbild som visar MQTT-meddelanden i Event Hubs med hjälp av Stream Analytics-frågeverktyget.

Nästa steg

För kodexempel går du till den här GitHub-lagringsplatsen.