Delen via


Zelfstudie: Naamruimteonderwerpen gebruiken om MQTT-berichten te routeren naar Azure Event Hubs (Azure CLI)

In deze zelfstudie leert u hoe u een naamruimteonderwerp gebruikt om gegevens van MQTT-clients naar Azure Event Hubs te routeren. Dit zijn de stappen op hoog niveau:

Vereisten

  • Als u geen Azure-abonnement hebt, maakt u een gratis Azure-account voordat u begint.
  • Als u niet eerder met Event Grid werkt, leest u het Event Grid-overzicht voordat u aan deze zelfstudie begint.
  • Registreer de Event Grid-resourceprovider volgens de stappen in De Event Grid-resourceprovider registreren.
  • Zorg ervoor dat poort 8883 is geopend in uw firewall. Het voorbeeld in deze zelfstudie maakt gebruik van het MQTT-protocol, dat communiceert via poort 8883. Deze poort kan worden geblokkeerd in sommige bedrijfs- en onderwijsnetwerkomgevingen.

Cloud Shell starten

  1. Meld u aan bij de Azure Portal.

  2. Selecteer de koppeling om Cloud Shell te starten.

  3. Schakel over naar Bash.

    Schermopname van Azure Portal met Cloud Shell geopend en Bash geselecteerd.

Een Event Grid-naamruimte en -onderwerp maken

Als u een Event Grid-naamruimte en een onderwerp in de naamruimte wilt maken, kopieert u het volgende script naar een editor, vervangt u tijdelijke aanduidingen door werkelijke waarden en voert u de opdrachten uit.

Plaatsaanduiding Opmerkingen
RESOURCEGROUPNAME Geef een naam op voor de resourcegroep die moet worden gemaakt.
EVENTGRIDNAMESPACENAME Geef de naam op voor de Event Grid-naamruimte.
REGION Geef de locatie op waarin u de resources wilt maken.
NAMESPACETOPICNAME Geef een naam op voor het onderwerp van de naamruimte.
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

Een Event Hubs-naamruimte en een Event Hub maken

Als u een Event Hubs-naamruimte en een Event Hub in de naamruimte wilt maken, vervangt u tijdelijke aanduidingen door werkelijke waarden en voert u de volgende opdrachten uit. Deze Event Hub wordt gebruikt als gebeurtenis-handler in het gebeurtenisabonnement dat u in deze zelfstudie maakt.

Plaatsaanduiding Opmerkingen
EVENTHUBSNAMESPACENAME Geef een naam op voor de Event Hubs-naamruimte die moet worden gemaakt.
EVENTHUBNAME Geef de naam op voor het Event Hubs-exemplaar (Event Hub) dat moet worden gemaakt in de Event Hubs-naamruimte.
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

Event Grid-naamruimte toegang geven tot het verzenden van gebeurtenissen naar de Event Hub

Voer de volgende opdracht uit om de service-principal van de Event Grid-naamruimte toe te voegen aan de rol Azure Event Hubs-gegevenszender in de Event Hubs-naamruimte. Hiermee kunnen de Event Grid-naamruimte en -resources hierin gebeurtenissen verzenden naar de Event Hub in de Event Hubs-naamruimte.

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

Een gebeurtenisabonnement maken met Event Hubs als eindpunt

Als u een gebeurtenisabonnement wilt maken voor het naamruimteonderwerp dat u eerder hebt gemaakt, vervangt u tijdelijke aanduidingen door werkelijke waarden en voert u de volgende opdrachten uit. Dit abonnement is geconfigureerd voor het gebruik van de Event Hub als gebeurtenis-handler.

Plaatsaanduiding Opmerkingen
EVENTSUBSCRIPTIONNAME Geef een naam op voor het gebeurtenisabonnement voor het naamruimteonderwerp.
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\"}}}}}}"

Routering configureren in de Event Grid-naamruimte

Voer de volgende opdrachten uit om routering in de naamruimte in te schakelen om berichten of gebeurtenissen te routeren naar het naamruimteonderwerp dat u eerder hebt gemaakt. Het gebeurtenisabonnement op dat naamruimteonderwerp stuurt deze gebeurtenissen door naar de Event Hub die is geconfigureerd als een gebeurtenis-handler.

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

Clientclient, onderwerpruimte en machtigingsbindingen

Maak nu een client om een paar berichten te verzenden voor testen. In deze stap maakt u een client, een onderwerpruimte met een onderwerp en bindingen voor uitgevers en abonnees.

Zie quickstart: MQTT-berichten publiceren en abonneren op een Event Grid-naamruimte met de Azure CLI voor gedetailleerde instructies.

Plaatsaanduiding Opmerkingen
CLIENTNAME Geef een naam op voor de client die een paar testberichten verzendt.
CERTIFICATETHUMBPRINT Vingerafdruk van clientcertificaat. Zie de bovenstaande quickstart voor instructies voor het maken van een certificaat en het extraheren van een vingerafdruk. Gebruik dezelfde vingerafdruk in het hulpprogramma MQTTX om testberichten te verzenden.
TOPICSPACENAME Geef een naam op voor de onderwerpruimte die moet worden gemaakt.
PUBLSHERBINDINGNAME Geef een naam op voor de uitgeverbinding.
SUBSCRIBERBINDINGNAME Geef een naam op voor de abonneebinding.
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

Berichten verzenden met MQTTX

Gebruik MQTTX om enkele testberichten te verzenden. Zie de quickstart: Publiceren en abonneren op een MQTT-onderwerp voor stapsgewijze instructies.

Controleer of de Event Hub deze berichten heeft ontvangen op de pagina Overzicht voor uw Event Hubs-naamruimte.

Schermopname van de overzichtspagina van de Event Hub met het aantal binnenkomende berichten.

Gerouteerde MQTT-berichten in Event Hubs weergeven met behulp van een Stream Analytics-query

Navigeer naar het Event Hubs-exemplaar (Event Hub) binnen uw gebeurtenisabonnement in Azure Portal. Gegevens van uw Event Hub verwerken met behulp van Stream Analytics. Zie Procesgegevens van Azure Event Hubs met behulp van Stream Analytics - Azure Event Hubs | Microsoft Learn. U kunt de MQTT-berichten in de query zien.

Schermopname van de MQTT-berichtengegevens in Event Hubs met behulp van het stream analytics-queryhulpprogramma.

Volgende stappen

Ga naar deze GitHub-opslagplaats voor codevoorbeelden.