MQTT è l'acronimo di Message Queuing Telemetry Transport. È un protocollo di messaggistica leggero da utilizzare nei casi in cui i client necessitano di un'impronta di codice ridotta e sono connessi a reti inaffidabili o con risorse di larghezza di banda limitate. È utilizzato principalmente per le comunicazioni machine-to-machine (M2M) o per le connessioni di tipo Internet of Things.
L'MQTT è stato originariamente creato dal Dr. Andy Stanford-Clark e da Arlen Nipper nel 1999. Lo scopo originale del metodo di comunicazione era quello di consentire ai dispositivi di monitoraggio utilizzati nell'industria petrolifera e del gas di inviare i propri dati a server remoti. In molti casi, tali dispositivi di monitoraggio venivano utilizzati in luoghi remoti, dove sarebbe stato difficile o impossibile stabilire qualsiasi tipo di linea fissa, connessione cablata o trasmissione radio. All'epoca, l'unica opzione per questi casi era la comunicazione satellitare, molto costosa e fatturata in base alla quantità di dati utilizzati. Con migliaia di sensori sul campo, il settore aveva bisogno di una forma di comunicazione in grado di fornire dati sufficientemente affidabili per l'uso, utilizzando al contempo una larghezza di banda minima.
L'MQTT è stato standardizzato come open source nell'ambito dell'Organization for the Advancement of Structured Information Standards (OASIS) nel 2013. OASIS gestisce tuttora lo standard MQTT.
Gli avvisi personalizzati e la visualizzazione dei dati consentono di identificare e prevenire rapidamente i problemi di salute e di prestazioni della rete.
MQTT funziona su TCPS utilizzando una topologia PUSH/SUBSCRIBE. Nell'architettura MQTT, esistono due tipi di sistemi: i client e i broker. Il broker è il server con cui comunicano i client. Il broker riceve le comunicazioni dai client e le invia ad altri client. I client non comunicano direttamente tra loro, ma si collegano al broker. Ogni client può essere un publisher, un subscriber o entrambi.
MQTT è un protocollo guidato dagli eventi. Non vi è alcuna trasmissione di dati periodica o continua. In questo modo la trasmissione è ridotta al minimo. Un client pubblica solo quando ci sono informazioni da inviare e un broker invia informazioni ai sottoscrittori solo quando arrivano nuovi dati.
Un altro modo in cui MQTT riduce al minimo le sue trasmissioni è la costruzione di messaggi piccoli e strettamente definiti. Ogni messaggio ha un'intestazione fissa di soli 2 byte. È possibile utilizzare un'intestazione opzionale, che però aumenta le dimensioni del messaggio. Il carico utile del messaggio è limitato a soli 256 MB. Tre diversi livelli di qualità del servizio (QoS) consentono ai progettisti di rete di scegliere tra la minimizzazione della trasmissione dei dati e la massimizzazione dell'affidabilità.
Per situazioni in cui le comunicazioni sono affidabili ma limitate, QoS 0 può essere l'opzione migliore. Per le situazioni in cui le comunicazioni sono inaffidabili, ma le connessioni non sono così limitate, la QoS 2 è l'opzione migliore. La QoS 1 offre una sorta di soluzione ottimale, ma richiede che l'applicazione che riceve i dati sappia come gestire i duplicati.
Sia per la QoS 1 che per la QoS 2, i messaggi vengono salvati o messi in coda per i client che sono offline e che hanno una sessione persistente stabilita. Questi messaggi vengono reinviati (secondo il livello di QoS appropriato) una volta che il client è di nuovo online.
Notifiche in tempo reale significano una risoluzione più rapida dei problemi, in modo da poter intervenire prima che si verifichino problemi più gravi.
I messaggi in MQTT sono pubblicati come argomenti. Gli argomenti sono strutture in una gerarchia che utilizza il carattere slash (/) come delimitatore. Questa struttura assomiglia all'albero delle directory di un file system. Una struttura come Sensori/OilandGas/Pressione/ consente a un sottoscrittore di specificare che gli vengano inviati solo i dati dei client che pubblicano sull'argomento Pressione o, per una visione più ampia, tutti i dati dei client che pubblicano su qualsiasi argomento Sensori/OilandGas. Gli argomenti non vengono creati esplicitamente in MQTT. Se un broker riceve dati pubblicati su un argomento che attualmente non esiste, l'argomento viene semplicemente creato e i client possono iscriversi al nuovo argomento.
Per mantenere l'ingombro ridotto, i messaggi ricevuti non vengono memorizzati sul broker, a meno che non siano contrassegnati dal flag retained. Questo è chiamato messaggio conservato. Gli utenti che desiderano memorizzare i messaggi ricevuti dovranno memorizzarli altrove, al di fuori del protocollo MQTT. C'è un'eccezione.
Essendo un protocollo guidato dagli eventi, è possibile, anzi probabile, che un sottoscrittore riceva pochissimi messaggi per un determinato argomento, anche per un lungo periodo di tempo. Nella struttura di argomenti precedentemente menzionata, forse i messaggi all'argomento Pressione vengono inviati solo quando un sensore rileva che la pressione ha superato un certo valore. Supponendo che il sensore monitorato non si guasti spesso, potrebbero passare mesi o addirittura anni prima che un client pubblichi un messaggio su quell'argomento.
Per garantire che un nuovo abbonato riceva i messaggi di un argomento, i broker possono conservare l'ultimo messaggio inviato a ciascun argomento. Questo è chiamato messaggio conservato. Ogni volta che un nuovo cliente si iscrive a un argomento o quando un cliente esistente torna online, il messaggio conservato viene inviato agli abbonati, assicurando così che l'abbonamento sia attivo e che abbia le informazioni più recenti.
Quando le comunicazioni sono inaffidabili, è possibile che un editore si disconnetta dalla rete senza preavviso. Un editore può registrare un messaggio da inviare agli abbonati nel caso in cui l'editore si disconnetta inaspettatamente; si tratta delle cosiddette ultime volontà. Questo messaggio viene cachettato sul broker e inviato agli abbonati nel caso in cui l'editore si disconnetta in modo improprio. In genere, questo messaggio include informazioni che consentono di identificare l'editore disconnesso, in modo da poter intraprendere le azioni appropriate.
Per mantenere il protocollo piccolo, ci sono solo quattro azioni possibili per ogni comunicazione: pubblicare, sottoscrivere, annullare l'iscrizione o eseguire un ping.
L'obiettivo originario del protocollo MQTT era quello di realizzare la trasmissione di dati più piccola e più efficiente possibile su linee di comunicazione costose e inaffidabili. Pertanto, la sicurezza non è stata una preoccupazione primaria durante la progettazione e l'implementazione di MQTT.
Tuttavia, sono disponibili alcune opzioni di sicurezza al costo di una maggiore trasmissione di dati e di un maggiore ingombro.
PRTG è un software di monitoraggio di rete completo e tiene traccia dell'intera infrastruttura IT.
Il3 aprile 2019 OASIS ha pubblicato lo standard ufficiale MQTT v5.0
Principali nuove caratteristiche di MQTT v5.0