Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här snabbstarten använder du funktionen Azure Event Grid MQTT Broker för att stödja meddelanden med hjälp av MQTT-protokollet. Klienter, inklusive 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 kan du läsa Ö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. I den här handledningen används 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 Kom igång med Azure Cloud Shell.
- Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör på 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 loginav kommandot . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI. - När du blir uppmanad, installera Azure CLI-tillägget vid första användning. Mer information om tillägg finns i Hantera Azure CLI-tillägg.
- Kör az version för att ta reda på 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-kommandona 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 ett kommandotolkfönster i användarprofilmappen (Win+R type %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 MqttAppSamplesCAProvisionerOm du vill skapa ett certifikat för klienten använder du certifikatutfärdarfilerna (CA) som genererats. 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 2400hOm du vill visa tumavtrycket kör du stegkommandot.
step certificate fingerprint client1-authnID.pem
Skapa ett namnområde
Använd det här kommandot för att skapa ett namnområde. Uppdatera kommandot med resursgruppen och ett namnområdesnamn.
az eventgrid namespace create --resource-group {Resource Group} --name {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
För att hålla den här snabbstarten enkel skapar du ett namnområde med minimala egenskaper. Mer information om nätverk, säkerhet och inställningar på andra flikar finns i Skapa och hantera namnområden.
Skapa klienter
Använd det här kommandot för att skapa klienten. Uppdatera kommandot med resursgruppen och ett namnområdesnamn.
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]}"
- Använd tumavtrycksmatchning för autentisering för att hålla den här snabbstarten enkel. 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 du 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 det här kommandot för att skapa ämnesutrymmet. Uppdatera kommandot med din resursgrupp, namnområdesnamn och namn på ämnesutrymme.
az eventgrid namespace topic-space create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {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 --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}
Använd det här 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 --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}
Publicera och prenumerera på MQTT-meddelanden
Följande exempelkod är en enkel .NET-publicerare som försöker ansluta och publicera till en namnrymd och prenumererar på MQTT-ämnet. Du kan ändra koden för dina krav och köra den i Visual Studio eller något annat designverktyg.
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, gå till Hantera NuGet-paket och sök efter MQTTnet. Välj MQTTnet-paket och installera.
Anmärkning
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 utifrån var klientcertifikatfilerna finns. 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.
Relaterat innehåll
- Självstudie: Dirigera MQTT-meddelanden till Azure Event Hubs med hjälp av namnområdesämnen
- Självstudie: Dirigera MQTT-meddelanden till Azure Functions med hjälp av anpassade ämnen
För kodexempel går du till den här GitHub-lagringsplatsen.