Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung verwenden Sie das Azure Event Grid MQTT-Broker-Feature, um Messaging mithilfe des MQTT-Protokolls zu unterstützen. Clients, einschließlich Geräte und Cloudanwendungen, können MQTT-Nachrichten über flexible hierarchische Themen für Szenarien wie hochskalierte Übertragung und Steuerung 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-Broker.
- Erstellen Sie Unterressourcen wie Clients, Clientgruppen und Themenbereiche.
- Gewähren Sie Clients Zugriff auf das Veröffentlichen und Abonnieren von Themenräumen.
- 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 dem Ereignisraster arbeiten, lesen Sie die Übersicht über das Ereignisraster , bevor Sie dieses Lernprogramm starten.
- Registrieren Sie den Event Grid-Ressourcenanbieter wie in Registrieren des Event Grid-Ressourcenanbieters beschrieben.
- Stellen Sie sicher, dass der Port 8883 in Ihrer Firewall geöffnet ist. In diesem Lernprogramm 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 "Erste Schritte mit Azure Cloud Shell".
- Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS verwenden, 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. Um den Authentifizierungsprozess abzuschließen, führen Sie die Schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI. - Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Verwalten von Azure CLI-Erweiterungen.
- Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
- Dieser Artikel erfordert Version 2.53.1 oder höher der Azure CLI. 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.
- Überprüfen Sie die Cli-Befehle des Event Grid-Namespaces.
Generieren eines Beispielclientzertifikats und Fingerabdrucks
Wenn Sie noch kein Zertifikat besitzen, können Sie ein Beispielzertifikat mithilfe der Schritt-CLI erstellen. Erwägen Sie die manuelle Installation für Windows.
Öffnen Sie nach einer erfolgreichen Installation mithilfe der Cli ein Eingabeaufforderungsfenster in Ihrem Benutzerprofilordner (Win+R type %USERPROFILE%
).
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
Verwenden Sie zum Erstellen eines Zertifikats für den Client die generierten Zertifizierungsstellesdateien. Stellen Sie sicher, dass Sie den richtigen Pfad für die Zertifikat- und geheimen Dateien 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
Führen Sie den Step-Befehl aus, um den Fingerabdruck anzuzeigen.
step certificate fingerprint client1-authnID.pem
Erstellen eines Namespace
Verwenden Sie diesen Befehl, um einen Namespace zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe und einem Namespacenamen.
az eventgrid namespace create --resource-group {Resource Group} --name {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
Um diese Schnellstartanleitung einfach zu halten, erstellen Sie einen Namespace mit minimalen Eigenschaften. Weitere Informationen zu Netzwerk, Sicherheit und Einstellungen auf anderen Registerkarten finden Sie unter Erstellen und Verwalten von Namespaces.
Erstellen von Clients
Verwenden Sie diesen Befehl, um den Client zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe und einem Namespacenamen.
az eventgrid namespace client create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Client Name} --authentication-name client1-authnID --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[Client Thumbprint]}"
- Um diese Schnellstartanleitung einfach zu halten, verwenden Sie die Fingerabdruckabgleichung für die Authentifizierung. Schritte zum Verwenden der X.509-Zertifizierungsstelle-Zertifikatkette für die Clientauthentifizierung finden Sie unter Clientauthentifizierung mithilfe der Zertifikatkette.
- Verwenden Sie für diese Übung die Standardgruppe
$all client
, die alle Clients im Namespace enthält. Weitere Informationen zum Erstellen benutzerdefinierter Clientgruppen mithilfe von Clientattributen finden Sie unter "Clientgruppen".
Erstellen von Themenbereichen
Verwenden Sie diesen Befehl, um den Themenbereich zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und dem Themenbereichsnamen.
az eventgrid namespace topic-space create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Topicspace Name} --topic-templates ['contosotopics/topic1']
Erstellen von Berechtigungsbindungen
Verwenden Sie den az eventgrid
Befehl, um die erste Berechtigungsbindung für die Herausgeberberechtigung zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und dem Berechtigungsbindungsnamen.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}
Verwenden Sie diesen Befehl, um die zweite Berechtigungsbindung zu erstellen. Aktualisieren Sie den Befehl mit Ihrer Ressourcengruppe, dem Namespacenamen und dem Berechtigungsbindungsnamen. Diese Berechtigungsbindung ist für Abonnenten vorgesehen.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {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 mit einem Namespace herzustellen und zu veröffentlichen und das MQTT-Thema zu abonnieren. Sie können den Code für Ihre Anforderungen ändern und in Visual Studio oder einem anderen Designtool ausfü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 "NuGet-Pakete verwalten", und suchen Sie nach MQTTnet. Wählen Sie MQTTnet-Paket aus, und installieren Sie es.
Hinweis
Der folgende Beispielcode dient nur zu Demonstrationszwecken und ist nicht für die Produktionsverwendung vorgesehen.
C#-Beispielcode zum Verbinden eines Clients, Veröffentlichen und Abonnieren einer MQTT-Nachricht zu einem Thema
Von Bedeutung
Aktualisieren Sie die Dateipfade des Clientzertifikats und des Schlüssels pem 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 unter den Clients Veröffentlichungen zu tätigen und Abonnements abzuschließen.
Verwandte Inhalte
- Lernprogramm: Weiterleiten von MQTT-Nachrichten an Azure Event Hubs mithilfe von Namespacethemen
- Lernprogramm: Weiterleiten von MQTT-Nachrichten an Azure Functions mithilfe von benutzerdefinierten Themen
Codebeispiele finden Sie in diesem GitHub-Repository.