Freigeben über


Schnellstart: Veröffentlichen und Abonnieren von MQTT-Nachrichten im Event Grid-Namespace mit der Azure CLI

Das MQTT Vermittler-Feature Azure Event Grid unterstützt Messaging mithilfe des MQTT-Protokolls. Clients (sowohl Geräte als auch Cloudanwendungen) können MQTT-Nachrichten über flexible hierarchische Themen für Szenarien wie umfassende Übertragungen und Command Control veröffentlichen und abonnieren.

In diesem Artikel verwenden Sie die Azure CLI für Folgendes:

  • Erstellen Sie einen Event Grid-Namespace, und aktivieren Sie den MQTT Vermittler.
  • Erstellen von Unterressourcen wie Clients, Clientgruppen und Themenbereichen.
  • Gewähren des Zugriffs von Clients zum Veröffentlichen und Abonnieren von Themenbereichen.
  • Veröffentlichen und Empfangen von MQTT-Nachrichten.

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

  • 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.
  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie unter Windows oder macOS arbeiten, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
  • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
  • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
  • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
  • Für diesen Artikel ist mindestens Version 2.53.1 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
  • Sie benötigen ein X.509-Clientzertifikat, um den Fingerabdruck zu generieren und die Clientverbindung zu authentifizieren.
  • Lesen Sie die CLI-Dokumentation zum Event Grid-Namespace.

Generieren eines Beispielclientzertifikats und Fingerabdrucks

Wenn Sie noch kein Zertifikat besitzen, können Sie mit der Step CLI ein Beispielzertifikat generieren. Erwägen Sie die manuelle Installation für Windows.

Nach einer erfolgreichen Installation von Step sollten Sie eine Eingabeaufforderung in Ihrem Benutzerprofilordner öffnen (WINDOWS+R, geben Sie %USERPROFILE% ein).

  1. Führen Sie den folgenden Befehl aus, um Stamm- und Zwischenzertifikate zu erstellen. Denken Sie an das Kennwort, das Sie im nächsten Schritt verwenden müssen.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Verwenden Sie die von der Zertifizierungsstelle generierten Dateien, um ein Zertifikat für den Client zu erstellen. Stellen Sie sicher, dass Sie den richtigen Pfad für die Zertifikat- und Geheimnisdateien im Befehl verwenden.

    step certificate create client1-authnID client1-authnID.pem client1-authnID.key --ca .step/certs/intermediate_ca.crt --ca-key .step/secrets/intermediate_ca_key --no-password --insecure --not-after 2400h
    
  3. Führen Sie zum Anzeigen des Fingerabdrucks den Step-Befehl aus.

    step certificate fingerprint client1-authnID.pem
    

Erstellen eines Namespace

Erstellen Sie mit dem Befehl einen Namespace. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe und einem Namespacenamen.

az eventgrid namespace create -g {Resource Group} -n {Namespace Name} --topic-spaces-configuration "{state:Enabled}"

Um die Schnellstartanleitung einfach zu halten, erstellen Sie einen Namespace mit minimalen Eigenschaften. Ausführliche Schritte zur Konfiguration von Netzwerk-, Sicherheits- und anderen Einstellungen auf anderen Seiten des Assistenten finden Sie unter Erstellen und Verwalten von Namespaces.

Erstellen von Clients

Verwenden Sie den Befehl, um den Client zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe und einem Namespacenamen.

az eventgrid namespace client create -g {Resource Group} --namespace-name {Namespace Name} -n {Client Name} --authentication-name client1-authnID --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[Client Thumbprint]}"
  • Um den Schnellstart einfach zu halten, verwenden Sie den Fingerabdruckabgleich zur Authentifizierung. Detaillierte Schritte zur Verwendung der X.509 CA-Zertifikatskette für die Clientauthentifizierung finden Sie unter Clientauthentifizierung mit Zertifikatskette.
  • Außerdem verwenden wir für diese Übung $all client die Standardclientgruppe „$all“, die alle Clients im Namespace umfasst. Weitere Informationen zum Erstellen von benutzerdefinierten Clientgruppen mithilfe von Clientattributen finden Sie unter „Clientgruppen“.

Erstellen von Themenbereichen

Verwenden Sie den Befehl, um den Themenbereich zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und einem Themenbereichsnamen.

az eventgrid namespace topic-space create -g {Resource Group} --namespace-name {Namespace Name} -n {Topicspace Name} --topic-templates ['contosotopics/topic1']

Erstellen von Berechtigungsbindungen

Verwenden az eventgridSie den Befehl „az resource“, um die erste Berechtigungsbindung für die Herausgeberberechtigung zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und einem Namen für die Berechtigungsbindung.

az eventgrid namespace permission-binding create -g {Resource Group} --namespace-name {Namespace Name} -n {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}

Verwenden Sie den Befehl, um die zweite Berechtigungsbindung zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und einem Namen für die Berechtigungsbindung. Diese Berechtigungsbindung gilt für Abonnenten.

az eventgrid namespace permission-binding create -g {Resource Group} --namespace-name {Namespace Name} -n {Name of second Permission Binding} --client-group-name '$all' --permission subscriber --topic-space-name {Topicspace Name}

Veröffentlichen und Abonnieren von MQTT-Nachrichten

Der folgende Beispielcode ist ein einfacher .NET-Herausgeber, der versucht, eine Verbindung herzustellen und in einem Namespace zu veröffentlichen und der das MQTT-Thema abonniert. Sie können den Code verwenden, um ihn gemäß Ihren Anforderungen zu ändern und ihn in Visual Studio oder einem anderen von Ihnen bevorzugten Tool auszuführen.

Sie müssen das MQTTnet-Paket (Version 4.1.4.563) von NuGet installieren, um diesen Code auszuführen. (Klicken Sie in Visual Studio im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen, wechseln Sie zu Verwalten Sie NuGet-Pakete, und suchen Sie nach MQTTnet. Wählen Sie MQTTnet-Paket und installieren.)

Hinweis

Der folgende Beispielcode dient nur zu Demonstrationszwecken und ist nicht für die Verwendung in der Produktion vorgesehen.

C#-Beispielcode zum Herstellen einer Verbindung mit einem Client und zum Veröffentlichen/Abonnieren einer MQTT-Nachricht für ein Thema

Wichtig

Aktualisieren Sie die Clientzertifikat- und Schlüssel-PEM-Dateipfade abhängig vom Speicherort Ihrer Clientzertifikatdateien. Stellen Sie außerdem sicher, dass der Clientauthentifizierungsname und die Themeninformationen mit Ihrer Konfiguration übereinstimmen.

using MQTTnet.Client;
using MQTTnet;
using System.Security.Cryptography.X509Certificates;

string hostname = "{Your Event Grid namespace MQTT hostname}";
string clientId = "client1-session1";  //client ID can be the session identifier.  A client can have multiple sessions using username and clientId.
string x509_pem = @" client certificate cer.pem file path\client.cer.pem";  //Provide your client certificate .cer.pem file path
string x509_key = @"client certificate key.pem file path\client.key.pem";  //Provide your client certificate .key.pem file path

var certificate = new X509Certificate2(X509Certificate2.CreateFromPemFile(x509_pem, x509_key).Export(X509ContentType.Pkcs12));

var mqttClient = new MqttFactory().CreateMqttClient();

var connAck = await mqttClient!.ConnectAsync(new MqttClientOptionsBuilder()
    .WithTcpServer(hostname, 8883)
    .WithClientId(clientId)
    .WithCredentials("client1-authnID", "")  //use client authentication name in the username
    .WithTls(new MqttClientOptionsBuilderTlsParameters()
    {
        UseTls = true,
        Certificates = new X509Certificate2Collection(certificate)
    })

    .Build());

Console.WriteLine($"Client Connected: {mqttClient.IsConnected} with CONNACK: {connAck.ResultCode}");

mqttClient.ApplicationMessageReceivedAsync += async m => await Console.Out.WriteAsync($"Received message on topic: '{m.ApplicationMessage.Topic}' with content: '{m.ApplicationMessage.ConvertPayloadToString()}'\n\n");

var suback = await mqttClient.SubscribeAsync("contosotopics/topic1");
suback.Items.ToList().ForEach(s => Console.WriteLine($"subscribed to '{s.TopicFilter.Topic}' with '{s.ResultCode}'"));

while (true)
{
    var puback = await mqttClient.PublishStringAsync("contosotopics/topic1", "hello world!");
    Console.WriteLine(puback.ReasonString);
    await Task.Delay(1000);
}

Sie können denselben Code für mehrere Clients replizieren und ändern, um das Veröffentlichen/Abonnieren zwischen den Clients durchzuführen.

Nächste Schritte