Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa guida introduttiva si usa la funzionalità broker MQTT di Griglia di eventi di Azure per supportare la messaggistica usando il protocollo MQTT. I client, inclusi i dispositivi e le applicazioni cloud, possono pubblicare e sottoscrivere messaggi MQTT su argomenti gerarchici flessibili per scenari come trasmissione e comando e controllo su larga scala.
In questo articolo si usa l'interfaccia della riga di comando di Azure per:
- Creare uno spazio dei nomi Event Grid e abilitare il broker MQTT.
- Creare sottorisorse, ad esempio client, gruppi client e spazi di argomenti.
- Concedere ai clienti l'accesso per pubblicare e sottoscrivere a spazi tematici.
- Pubblicare e ricevere messaggi MQTT.
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Prerequisiti
- Se non conosci Event Grid, consulta la panoramica di Event Grid prima di iniziare questa esercitazione.
- Registrare il provider di risorse di Griglia di eventi in base ai passaggi descritti in Registrare il provider di risorse di Griglia di eventi.
- Assicurarsi che la porta 8883 sia aperta nel firewall. Questa esercitazione usa il protocollo MQTT, che comunica sulla porta 8883. Questa porta potrebbe essere bloccata in alcuni ambienti di rete aziendali e didattici.
- È possibile utilizzare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.
- Se preferisci eseguire localmente i comandi di riferimento della CLI, installa l'Azure CLI. Se si esegue in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
- Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure usando il comando
az login
. Per completare il processo di autenticazione, seguire i passaggi visualizzati nel terminale. Per altre opzioni di accesso, vedere Eseguire l'autenticazione ad Azure con l'interfaccia della riga di comando di Azure. - Quando ti viene richiesto, installa l'estensione Azure CLI al primo utilizzo. Per altre informazioni sulle estensioni, vedere Gestire le estensioni dell'interfaccia della riga di comando di Azure.
- Esegui az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, avviare az upgrade.
- Questo articolo richiede la versione 2.53.1 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.
- È necessario un certificato client X.509 per generare l'identificazione personale e autenticare la connessione client.
- Esaminare i comandi dell'interfaccia della riga di comando dello spazio dei nomi di Event Grid.
Generare un certificato client di esempio e un'impronta digitale
Se non si ha già un certificato, è possibile creare un certificato di esempio usando il step CLI. Prendere in considerazione l'installazione manuale per Windows.
Dopo aver completato l'installazione usando step nell'interfaccia della riga dei comandi, aprire una finestra del prompt dei comandi nella cartella del profilo utente (Win+R type %USERPROFILE%
).
Per creare certificati radice e intermedi, usare il comando seguente. Ricordare la password, che è necessario usare nel passaggio successivo.
step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
Per creare un certificato per il client, usare i file dell'autorità di certificazione (CA) generati. Assicurarsi di usare il percorso corretto per i file di certificati e segreti nel comando .
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
Per visualizzare l'identificazione personale, eseguire il comando step.
step certificate fingerprint client1-authnID.pem
Creare uno spazio dei nomi
Usare questo comando per creare uno spazio dei nomi. Aggiornare il comando con il gruppo di risorse e un nome di spazio dei nomi.
az eventgrid namespace create --resource-group {Resource Group} --name {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
Per semplificare questo avvio rapido, creare uno spazio dei nomi con proprietà minime. Per altre informazioni su rete, sicurezza e impostazioni in altre schede, vedere Creare e gestire spazi dei nomi.
Creare client
Usare questo comando per creare il client. Aggiorna il comando con il tuo gruppo di risorse e il nome del namespace.
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]}"
- Per semplificare questo avvio rapido, usare la corrispondenza dell'identificazione personale per l'autenticazione. Per informazioni su come usare la catena di certificati della CA X.509 per l'autenticazione client, vedere Autenticazione client tramite catena di certificati.
- Per questo esercizio, usare il gruppo predefinito
$all client
, che include tutti i client nello spazio dei nomi . Per altre informazioni sulla creazione di gruppi client personalizzati tramite attributi client, vedere Gruppi di client.
Creare spazi argomento
Usare questo comando per creare lo spazio argomento. Aggiornare il comando con il gruppo di risorse, il nome dello spazio dei nomi e il nome dell'argomento.
az eventgrid namespace topic-space create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Topicspace Name} --topic-templates ['contosotopics/topic1']
Creare associazioni autorizzazioni
Usare il comando az eventgrid
per creare la prima associazione di autorizzazioni per i permessi del publisher. Aggiornare il comando con il gruppo di risorse, il nome dello spazio dei nomi e il nome dell'associazione di autorizzazioni.
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}
Usare questo comando per creare la seconda associazione di autorizzazioni. Aggiornare il comando con il gruppo di risorse, il nome dello spazio dei nomi e il nome dell'associazione di autorizzazioni. Questa associazione di autorizzazioni è per i sottoscrittori.
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}
Pubblicare ed eseguire la sottoscrizione in messaggi MQTT
Il codice di esempio seguente è un semplice publisher .NET che tenta di connettersi a uno spazio dei nomi, pubblica ed esegue la sottoscrizione nell'argomento MQTT. È possibile modificare il codice per i requisiti ed eseguirlo in Visual Studio o in un altro strumento di progettazione.
È necessario installare il pacchetto MQTnet (versione 4.1.4.563) da NuGet per eseguire questo codice. In Visual Studio fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni, scegliere Gestisci pacchetti NuGet e cercare MQTTnet. Selezionare pacchetto MQTTnet e installare.
Annotazioni
Il codice di esempio seguente è solo a scopo dimostrativo e non è destinato all'uso in produzione.
Codice C# di esempio per connettere un client, pubblicare e sottoscrivere un messaggio MQTT in un argomento
Importante
Aggiornare i percorsi del certificato client e del file pem della chiave in base alla posizione dei file di certificato client. Assicurati inoltre che il nome di autenticazione del client e le informazioni sull'argomento corrispondano alla tua configurazione.
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);
}
È possibile replicare e modificare lo stesso codice per più client per pubblicare e sottoscrivere tra i client.
Contenuti correlati
- Esercitazione: Instradare messaggi MQTT a Hub eventi di Azure usando gli argomenti dello spazio dei nomi
- Esercitazione: Instradare messaggi MQTT a Funzioni di Azure usando argomenti personalizzati
Per gli esempi di codice, passare a questo repository GitHub.