Sfruttare MQTT in cloud e in edge con Azure Event Grid

di Cristian Civera,

Nel mondo dell'informatica, ci imbattiamo spesso in soluzioni innovative che trasformano il modo in cui interagiamo con i dati e le applicazioni. Uno strumento molto utile nel mondo Microsoft Azure è Event Grid, una tecnologia di gestione degli eventi che facilita la comunicazione tra servizi in modo altamente efficiente e scalabile. Questa piattaforma consente ai diversi componenti di un'applicazione di rimanere sincronizzati attraverso la sottoscrizione a eventi specifici, rendendo possibile l'elaborazione in tempo reale di informazioni rilevanti. I vantaggi di Event Grid sono numerosi: migliora l'efficienza operativa riducendo la necessità di polling continuo tra i servizi, supporta modelli di programmazione event-driven, e offre scalabilità e affidabilità, il tutto in maniera gestita.

Se usciamo però dal mondo cloud, ci accorgiamo che questa esigenza c'è anche al di fuori, per far comunicare dispositivi in edge verso il cloud, oppure edge verso altri edge, perciò si rende necessario allargare il sistema degli eventi con messaggi personalizzati e client che dialogano tra loro, il tutto in maniera altamente affidabile, distribuito e scalabile.
Per questo motivo in Event Grid è stato aggiunto il supporto a MQTT 5, protocollo ampiamente utilizzato e compatibile con qualsiasi linguaggio e tecnologia, che consente scenari di publish/subscribe, ma anche di request/response. L'implementazione di Azure prevedere la possibilità di configurare namespace, ognuno dei quali ha i client, con topic e permessi di utilizzo degli stessi.

In questo script vogliamo vedere come muovere i primi passi, innanzitutto creando il namespace di Event Grid attraverso il portale.

Inseriamo i parametri comuni e decidiamo le unit. Queste, oltre al prezzo, determino la capacità di scaling. A questo indirizzo https://learn.microsoft.com/en-us/azure/event-grid/quotas-limits possiamo trovare i limiti, ma indicativamente ci basta sapere che una unit supporta 1000 messaggi al secondo.
Creato il namespace entriamo nella sezione MQTT broker e abilitiamo il supporto indicando alcuni limiti sulle connessioni simultanee.

Abilitato il supporto possiamo procedure nella sezione Clients per creare almeno un client con il quale connetterci al broker. L'autenticazione avviene esclusivamente tramite certificato e il canale viene crittografato, perciò una volta indicato l'id del client, possiamo scegliere come identificare il certificato. Nell'esempio seguente usiamo il thumbprint.

Il certificato può essere emesso da una CA propria, caricando di conseguenza la CA nella sezione CA certificates, oppure possiamo creare un certificato auto firmato. L'importante che questo sia valido e le sue caratteristiche di validazione siano state impostate nella sezione clients. Per preparare un certificato possiamo seguire le istruzioni a questo indirizzo https://learn.microsoft.com/en-us/azure/event-grid/mqtt-publish-and-subscribe-portal#generate-sample-client-certificate-and-thumbprint ma possiamo usare anche OpenSSL o altri strumenti.
Creato i client passiamo alla creazione di un topic space, cioè una regola per un topic che, anche mediante variabili, permettono ai client di mandare o ricevere messaggi. I client, infatti, non possono liberamente usare i topic, ma devono avere il permesso per farlo. Nella sezione omonima, quindi, creiamo lo space dandogli il template.

Come detto, il template può contenere variabili e possiamo indicare più topic a fronte di uno space.
Creato lo space dobbiamo autorizzare i client per poterlo utilizzare. Nella sezione Permission bindings creiamo un permesso che consente ai client di usare il topic space creato.

Il permesso si dà nei confronti di un gruppo di client, utile per non perdersi tra i tanti client. Il gruppo predefinito $all identifica tutti i client, perciò nell'immagine precedente stiamo dando il permesso di publish a tutti i client. L'operazione poi va ripetuta anche per il subscribe.

Fatto tutto questo non ci resta che prendere il nostro client MQTT di fiducia, impostare i seguenti parametri:
- Username: qualsiasi valore, in genere uguale al client id;
- Password: nessuna;
- TLS: abilitato;
- Certificate: impostare la chiave e il file generato;
- Host: da recuperare nell'overview del namespace, nel formato xxx.northeurope-1.ts.eventgrid.azure.net
Una volta connessi potremo inviare e sottoscrivere messaggi ai topic compatibili dello space.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi