Share via


Guida introduttiva: Pubblicare e sottoscrivere messaggi MQTT in uno spazio dei nomi di Griglia di eventi con l'interfaccia della riga di comando di Azure

La funzionalità broker MQTT Griglia di eventi di Azure supporta la messaggistica tramite il protocollo MQTT. I client (sia dispositivi che applicazioni cloud) possono pubblicare e sottoscrivere messaggi MQTT su argomenti gerarchici flessibili per scenari quali trasmissione e controllo su larga scala.

In questo articolo si usa l'interfaccia della riga di comando di Azure per:

  • Creare uno spazio dei nomi di Griglia di eventi e abilitare il broker MQTT.
  • Creare sottorisorse, ad esempio client, gruppi client e spazi di argomenti.
  • Concedere ai client l'accesso a spazi di pubblicazione e sottoscrizione agli argomenti.
  • Pubblicare e ricevere messaggi MQTT.

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • Se non si ha familiarità con Griglia di eventi, leggere la panoramica di Griglia di eventi prima di iniziare questa esercitazione.
  • Registrare il provider di risorse di Griglia di eventi in base alla procedura descritta in Registrare il provider di risorse di Griglia di eventi.
  • Assicurarsi che la porta 8883 sia aperta nel firewall. L'esempio in questa esercitazione usa il protocollo MQTT, che comunica sulla porta 8883. Questa porta potrebbe essere bloccata in alcuni ambienti di rete aziendali e didattici.
  • Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido di Bash in Azure Cloud Shell.
  • Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. 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 Accedere tramite l'interfaccia della riga di comando di Azure.
  • Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
  • Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire 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 la documentazione dell'interfaccia della riga di comando dello spazio dei nomi di Griglia di eventi.

Generare un certificato client di esempio e un'identificazione personale

Se non si ha già un certificato, è possibile creare un certificato di esempio usando l'interfaccia della riga di comando del passaggio. Prendere in considerazione l'installazione manuale per Windows.

Dopo aver completato l'installazione usando l'interfaccia della riga di comando del passaggio, aprire un prompt dei comandi nella cartella del profilo utente (tipo Win+R %U edizione Standard RPROFILE%).

  1. Per creare certificati radice e intermedi, eseguire 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
    
  2. Usare i file dell'autorità di certificazione (CA) generati per creare un certificato per il client. 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
    
  3. Per visualizzare l'identificazione personale, eseguire il comando step.

    step certificate fingerprint client1-authnID.pem
    

Creare uno spazio dei nomi

Usare il comando per creare uno spazio dei nomi. Aggiornare il comando con il gruppo di risorse e un nome dello spazio dei nomi.

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

Per semplificare la guida introduttiva, creare uno spazio dei nomi con proprietà minime. Per i passaggi dettagliati sulla configurazione di rete, sicurezza e altre impostazioni in altre pagine della procedura guidata, vedere Creare e gestire spazi dei nomi.

Creare client

Usare il comando per creare il client. Aggiornare il comando con il gruppo di risorse e un nome dello spazio dei nomi.

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]}"
  • Per semplificare l'avvio rapido, usare la corrispondenza di 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 viene usato 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 il comando per creare lo spazio dell'argomento. Aggiornare il comando con il gruppo di risorse, il nome dello spazio dei nomi e il nome dello spazio degli argomenti.

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

Creare associazioni di autorizzazioni

Usare il az eventgrid comando per creare la prima associazione di autorizzazioni per l'autorizzazione del server di pubblicazione. 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 -g {Resource Group} --namespace-name {Namespace Name} -n {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}

Usare il 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 è destinata ai sottoscrittori.

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

Pubblicare e sottoscrivere messaggi MQTT

Il codice di esempio seguente è un semplice editore .NET che tenta di connettersi e pubblicare in uno spazio dei nomi e sottoscrive l'argomento MQTT. È possibile usare il codice per modificare in base alle esigenze ed eseguire il codice in Visual Studio o in uno degli strumenti preferiti.

È 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 il pacchetto MQTTnet e installare.

Nota

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 a seconda del percorso dei file di certificato client. Assicurarsi inoltre che il nome di autenticazione client e le informazioni dell'argomento corrispondano alla 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.

Passaggi successivi