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
Meld u aan bij de Azure Portal.
Selecteer de koppeling om Cloud Shell te starten.
Schakel over naar Bash.
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.
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.
Volgende stappen
Ga naar deze GitHub-opslagplaats voor codevoorbeelden.