Freigeben über


Lernprogramm: Verwenden von Namespacethemen zum Weiterleiten von MQTT-Nachrichten an Azure Event Hubs (Azure CLI)

In diesem Lernprogramm erfahren Sie, wie Sie ein Namespacethema verwenden, um Daten von MQTT-Clients an Azure Event Hubs weiterzuleiten. Hier sind die übergeordneten Schritte:

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
  • Wenn Sie noch nicht mit dem Ereignisraster arbeiten, lesen Sie die Übersicht über das Ereignisraster , bevor Sie dieses Lernprogramm starten.
  • Registrieren Sie den Event Grid-Ressourcenanbieter gemäß den Schritten unter "Event Grid-Ressourcenanbieter registrieren".
  • Stellen Sie sicher, dass Port 8883 in Ihrer Firewall geöffnet ist. Das Beispiel in diesem Lernprogramm verwendet das MQTT-Protokoll, das über Port 8883 kommuniziert. Dieser Port kann in einigen Unternehmens- und Bildungsnetzwerkumgebungen blockiert werden.

Starten von Cloud Shell

  1. Melde dich beim Azure-Portal an.

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

  3. Wechseln Sie zu Bash.

    Screenshot des Azure-Portals mit geöffneter Cloud Shell und Ausgewählter Bash.

Erstellen eines Event Grid-Namespaces und Themas

Um einen Event Grid-Namespace und ein Thema im Namespace zu erstellen, kopieren Sie das folgende Skript in einen Editor, ersetzen Sie Platzhalter durch tatsächliche Werte, und führen Sie die Befehle aus.

Platzhalter Kommentare
RESOURCEGROUPNAME Geben Sie einen Namen für die zu erstellende Ressourcengruppe an.
EVENTGRIDNAMESPACENAME Geben Sie den 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-Namespaces und eines Event Hubs

Um einen Event Hubs-Namespace und einen Event Hub im Namespace zu erstellen, ersetzen Sie Platzhalter durch tatsächliche Werte, und führen Sie die folgenden Befehle aus. Dieser Event Hub wird als Ereignishandler im Ereignisabonnement verwendet, das Sie in diesem Lernprogramm 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 Hubs) 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

Geben Sie dem Event Grid-Namespace den Zugriff auf das Senden von Ereignissen an den Event Hub

Führen Sie den folgenden Befehl aus, um den Dienstprinzipal des Event Grid-Namespace zur Rolle "Azure Event Hubs Data Sender" im Event Hubs-Namespace hinzuzufügen. Damit kann 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 zuvor erstellte Namespacethema zu erstellen, ersetzen Sie Platzhalter durch tatsächliche Werte, und führen Sie die folgenden Befehle aus. Dieses Abonnement ist für die Verwendung des Event Hubs als Ereignishandler konfiguriert.

Platzhalter Kommentare
EVENTSUBSCRIPTIONNAME Geben Sie einen Namen für das Ereignisabonnement für das Namespace-Topic 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 das Routing für den Namespace zum Weiterleiten von Nachrichten oder Ereignissen an das zuvor erstellte Namespacethema zu ermöglichen. Das Ereignisabonnement in diesem Namespacethema leitet diese Ereignisse an den Event Hub weiter, der als Ereignishandler 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 Nachrichten zum Testen zu senden. In diesem Schritt erstellen Sie einen Client, einen Themenbereich mit einem Thema sowie Herausgeber- und Abonnentenbindungen.

Ausführliche Anweisungen finden Sie in der Schnellstartanleitung: Veröffentlichen und Abonnieren von MQTT-Nachrichten in einem 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 obigen Schnellstartanleitung. 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 Publisher-Bindung 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 mit MQTTX

Verwenden Sie MQTTX, um einige Testnachrichten zu senden. Schrittweise Anleitungen finden Sie in der Schnellstartanleitung: Veröffentlichen und Abonnieren eines MQTT-Themas.

Überprüfen Sie, ob der Event Hub diese Nachrichten auf der Seite "Übersicht" für Ihren Event Hubs-Namespace empfangen hat.

Screenshot der Seite

Anzeigen von weitergeleiteten MQTT-Nachrichten in Event Hubs mithilfe einer Stream Analytics-Abfrage

Navigieren Sie innerhalb Ihres Ereignisabonnements im Azure-Portal zur Event Hubs-Instanz (Event Hubs). Verarbeiten von Daten aus Ihrem Event Hub mithilfe von Stream Analytics. Weitere Informationen finden Sie unter Prozessdaten aus Azure Event Hubs mit Stream Analytics – Azure Event Hubs | Microsoft Learn. Sie können die MQTT-Nachrichten in der Abfrage sehen.

Screenshot der MQTT-Nachrichtendaten in Event Hubs mithilfe des Stream Analytics-Abfragetools.

Nächste Schritte

Für Codebeispiele wechseln Sie zu diesem GitHub-Repository.