Freigeben über


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

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie den Link aus, um die Cloud Shell zu starten.

  3. Wechseln Sie zu Bash.

    Screenshot: Azure-Portal mit geöffneter Cloud Shell und Auswahl von 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.

Screenshot: Seite „Übersicht“ des Ereignishubs mit der Anzahl eingehender Nachrichten

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.

Screenshot: Anzeige von MQTT-Nachrichtendaten in Event Hubs mithilfe des Stream Analytics-Abfragetools

Nächste Schritte

Codebeispiele finden Sie in diesem GitHub-Repository.