Tutorial: Weiterleiten von MQTT-Nachrichten an Azure Event Hubs mithilfe von Namespacethemen (Azure CLI)
In diesem Lernprogramm erfahren Sie, wie Sie ein Namespacethema verwenden, um Daten von MQTT-Clients an Azure Event Hubs weiterzuleiten. Die allgemeinen Schritte sind folgende:
Voraussetzungen
- Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
- Wenn Sie noch nicht mit Event Grid vertraut sind, lesen Sie bitte den Überblick über Event Grid, bevor Sie mit diesem Tutorial beginnen.
- Registrieren Sie den Event Grid-Ressourcenanbieter wie in Registrieren des Event Grid-Ressourcenanbieters beschrieben.
- Stellen Sie sicher, dass Port 8883 in Ihrer Firewall geöffnet ist. Für das Beispiel in diesem Tutorial wird das MQTT-Protokoll verwendet, das über Port 8883 kommuniziert. In einigen Netzwerkumgebungen von Unternehmen oder Bildungseinrichtungen könnte dieser Port unter Umständen blockiert sein.
Cloud Shell starten
Melden Sie sich beim Azure-Portal an.
Wählen Sie den Link aus, um die Cloud Shell zu starten.
Wechseln Sie zu Bash.
Erstellen eines Event Grid-Namespace und eines Themas
Um einen Event Grid-Namespace und ein Thema in diesem Namespace zu erstellen, kopieren Sie das folgende Skript in einen Editor, ersetzen die Platzhalter durch die tatsächlichen Werte und führen die Befehle aus.
Platzhalter | Kommentare |
---|---|
RESOURCEGROUPNAME |
Geben Sie einen Namen für die zu erstellende Ressourcengruppe an. |
EVENTGRIDNAMESPACENAME |
Geben Sie einen Namen für den Event Grid-Namespace an. |
REGION |
Geben Sie den Speicherort an, an dem Sie die Ressourcen erstellen möchten. |
NAMESPACETOPICNAME |
Geben Sie einen Namen für das Namespacethema an. |
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
Erstellen eines Event Hubs-Namespace und eines Event Hubs
Um einen Event Hubs-Namespace und einen Event Hub in diesem Namespace zu erstellen, ersetzen die Platzhalter durch die tatsächlichen Werte und führen die folgenden Befehle aus. Dieser Event Hub wird als Ereignishandler im Ereignisabonnement verwendet, das Sie in diesem Tutorial erstellen.
Platzhalter | Kommentare |
---|---|
EVENTHUBSNAMESPACENAME |
Geben Sie einen Namen für den zu erstellenden Event Hubs-Namespace an. |
EVENTHUBNAME |
Geben Sie den Namen für die Event Hubs-Instanz (Event Hub) an, die im Event Hubs-Namespace erstellt werden soll. |
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
Erteilen des Zugriffs zum Senden von Ereignissen an den Event Hub für den Event Grid-Namespace
Führen Sie den folgenden Befehl aus, um das Dienstprinzipal des Event Grid-Namespace zur Azure Event Hubs-Rolle Datensender im Event Hubs-Namespace hinzuzufügen. Damit können der Event Grid-Namespace und die darin enthaltenen Ressourcen Ereignisse an den Event Hub im Event Hubs-Namespace senden.
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
Erstellen eines Ereignisabonnements mit Event Hubs als Endpunkt
Um ein Ereignisabonnement für das Namespacethema, das Sie zuvor erstellt haben, zu erstellen, ersetzen die Platzhalter durch die tatsächlichen Werte und führen die folgenden Befehle aus. Dieses Abonnement ist so konfiguriert, dass es den Event Hub als Ereignisbehandler verwendet.
Platzhalter | Kommentare |
---|---|
EVENTSUBSCRIPTIONNAME |
Geben Sie einen Namen für das Ereignisabonnement für den Namespacethema an. |
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\"}}}}}}"
Konfigurieren des Routings im Event Grid-Namespace
Führen Sie die folgenden Befehle aus, um die Weiterleitung von Nachrichten oder Ereignissen an das zuvor erstellte Namespacethema zu aktivieren. Das Ereignisabonnement für dieses Namespacethema leitet diese Ereignisse an den Eve Hub weiter, der als Ereignisbehandler konfiguriert ist.
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}"
Client-Client, Themenbereich und Berechtigungsbindungen
Erstellen Sie nun einen Client, um einige Testnachrichten zu senden. In diesem Schritt erstellen Sie einen Client, einen Themenbereich mit einem Thema sowie Herausgeber- und Abonnentenbindungen.
Nähere Informationen finden Sie unter Schnellstart: Veröffentlichen und Abonnieren von MQTT-Nachrichten im Event Grid-Namespace mit der Azure CLI.
Platzhalter | Kommentare |
---|---|
CLIENTNAME |
Geben Sie einen Namen für den Client an, der einige Testnachrichten sendet. |
CERTIFICATETHUMBPRINT |
Fingerabdruck des Clientzertifikats. Anweisungen zum Erstellen eines Zertifikats und Extrahieren eines Fingerabdrucks finden Sie in der Schnellstartanleitung oben. Verwenden Sie denselben Fingerabdruck im MQTTX-Tool, um Testnachrichten zu senden. |
TOPICSPACENAME |
Geben Sie einen Namen für den zu erstellenden Themenbereich an. |
PUBLSHERBINDINGNAME |
Geben Sie einen Namen für die Herausgeberbindung an. |
SUBSCRIBERBINDINGNAME |
Geben Sie einen Namen für die Abonnentenbindung an. |
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
Senden von Nachrichten mithilfe von MQTTX
Verwenden Sie MQTTX, um einige Testnachrichten zu senden. Eine schrittweise Anleitung finden Sie unter Schnellstart: Veröffentlichen und Abonnieren eines MQTT-Themas.
Stellen Sie auf der Seite Übersicht für Ihren Event Hubs-Namespace sicher, dass der Event Hub diese Nachrichten empfangen hat.
Anzeigen der weitergeleiteten MQTT-Nachrichten in Event Hubs mithilfe einer Stream Analytics-Abfrage
Navigieren Sie zu der Event Hubs-Instanz (dem Event Hub) innerhalb Ihres Ereignisabonnements im Azure-Portal. Verarbeiten Sie Daten aus Ihrem Event Hub mit Stream Analytics. Weitere Informationen finden Sie unter Verarbeiten von Daten aus einem Event Hub mit Azure Stream Analytics – Azure Event Hubs | Microsoft Learn. Sie können die MQTT-Nachrichten in der Abfrage sehen.
Nächste Schritte
Codebeispiele finden Sie in diesem GitHub-Repository.