Snabbstart: Publicera och prenumerera på MQTT-meddelanden i ett Event Grid-namnområde med Azure CLI
Azure Event Grid MQTT-koordinatorfunktionen stöder meddelanden med hjälp av MQTT-protokollet. Klienter (både enheter och molnprogram) kan publicera och prenumerera på MQTT-meddelanden via flexibla hierarkiska ämnen för scenarier som högskalig sändning och kommando och kontroll.
I den här artikeln använder du Azure CLI för att:
- Skapa ett Event Grid-namnområde och aktivera MQTT-koordinatorn.
- Skapa underresurser som klienter, klientgrupper och ämnesutrymmen.
- Ge klienter åtkomst att publicera och prenumerera på ämnesutrymmen.
- Publicera och ta emot MQTT-meddelanden.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
- Om du inte har använt Event Grid tidigare läser du igenom Översikt över Event Grid innan du påbörjar den här självstudien.
- Registrera Event Grid-resursprovidern enligt stegen i Registrera Event Grid-resursprovidern.
- Kontrollera att port 8883 är öppen i brandväggen. Exemplet i den här självstudien använder MQTT-protokollet, som kommunicerar via port 8883. Den här porten kan blockeras i vissa företags- och utbildningsnätverksmiljöer.
- Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
- Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du överväga att köra Azure CLI i en Docker-container. Mer information finns i Kör Azure CLI i en Docker-container.
- Om du använder en lokal installation loggar du in på Azure CLI med hjälp
az login
av kommandot . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI. - När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
- Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Den här artikeln kräver version 2.53.1 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.
- Du behöver ett X.509-klientcertifikat för att generera tumavtrycket och autentisera klientanslutningen.
- Granska CLI-dokumentationen för Event Grid-namnområdet.
Generera ett exempelklientcertifikat och tumavtryck
Om du inte redan har ett certifikat kan du skapa ett exempelcertifikat med hjälp av steg CLI. Överväg att installera manuellt för Windows.
När installationen har slutförts med hjälp av steget CLI öppnar du en kommandotolk i användarprofilmappen (Win+R-typ %USERPROFILE%).
Kör följande kommando för att skapa rotcertifikat och mellanliggande certifikat. Kom ihåg lösenordet som du måste använda i nästa steg.
step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
Använd certifikatutfärdarfilerna (CA) som genererats för att skapa ett certifikat för klienten. Se till att använda rätt sökväg för certifikat- och hemlighetsfilerna i kommandot.
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
Om du vill visa tumavtrycket kör du stegkommandot.
step certificate fingerprint client1-authnID.pem
Skapa ett namnområde
Använd kommandot för att skapa ett namnområde. Uppdatera kommandot med resursgruppen och ett namnområdesnamn.
az eventgrid namespace create -g {Resource Group} -n {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
För att hålla snabbstarten enkel skapar du ett namnområde med minimala egenskaper. Detaljerade anvisningar om hur du konfigurerar nätverk, säkerhet och andra inställningar på andra sidor i guiden finns i Skapa och hantera namnområden.
Skapa klienter
Använd kommandot för att skapa klienten. Uppdatera kommandot med resursgruppen och ett namnområdesnamn.
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]}"
- För att hålla snabbstarten enkel använder du tumavtrycksmatchning för autentisering. Anvisningar om hur du använder X.509 CA-certifikatkedjan för klientautentisering finns i Klientautentisering med hjälp av certifikatkedjan.
- I den här övningen använder vi standardgruppen
$all client
, som innehåller alla klienter i namnområdet. Mer information om hur du skapar anpassade klientgrupper med hjälp av klientattribut finns i Klientgrupper.
Skapa ämnesutrymmen
Använd kommandot för att skapa ämnesutrymmet. Uppdatera kommandot med din resursgrupp, namnområdesnamn och namn på ämnesutrymme.
az eventgrid namespace topic-space create -g {Resource Group} --namespace-name {Namespace Name} -n {Topicspace Name} --topic-templates ['contosotopics/topic1']
Skapa behörighetsbindningar
az eventgrid
Använd kommandot för att skapa den första behörighetsbindningen för utgivarbehörighet. Uppdatera kommandot med din resursgrupp, namnområdesnamn och behörighetsbindningsnamn.
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}
Använd kommandot för att skapa den andra behörighetsbindningen. Uppdatera kommandot med din resursgrupp, namnområdesnamn och behörighetsbindningsnamn. Den här behörighetsbindningen är för prenumeranter.
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}
Publicera och prenumerera på MQTT-meddelanden
Följande exempelkod är en enkel .NET-utgivare som försöker ansluta och publicera till ett namnområde och prenumererar på MQTT-ämnet. Du kan använda koden för att ändra enligt dina behov och köra koden i Visual Studio eller något av dina favoritverktyg.
Du måste installera MQTTnet-paketet (version 4.1.4.563) från NuGet för att köra den här koden. (Högerklicka på projektnamnet i Solution Explorer i Visual Studio och gå till Hantera NuGet-paket och sök efter MQTTnet. Välj MQTTnet-paket och installera.)
Kommentar
Följande exempelkod är endast i demonstrationssyfte och är inte avsedd för produktionsanvändning.
Exempel på C#-kod för att ansluta en klient, publicera och prenumerera på ett MQTT-meddelande i ett ämne
Viktigt!
Uppdatera klientcertifikat- och nyckel-PEM-filsökvägarna beroende på platsen för klientcertifikatfilerna. Kontrollera också att klientens autentiseringsnamn och ämnesinformation överensstämmer med din konfiguration.
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);
}
Du kan replikera och ändra samma kod för flera klienter för att publicera och prenumerera bland klienterna.