Messaggistica MQTT

MQTT è uno standard aperto gestito dall'organizzazione di standardizzazione OASIS e riconosciuto a livello internazionale dall'ISO. È il protocollo principale utilizzato dai dispositivi e dalle applicazioni per comunicare con lo IoT strumento.

Nota: in 8.10 e versioni successive, è possibile utilizzare la messaggistica HTTP per scenari a basso volume. Non utilizzare la messaggistica HTTP per velocità di invio superiori a 1000 messaggi al secondo. HTTP La messaggistica richiede un handshake TLS e l'autenticazione su ogni messaggio pubblicato, e l'autenticazione richiede una ricerca nel database per il token di autenticazione del dispositivo. Questi requisiti mettono a dura prova il servizio di autenticazione e il database IoT degli strumenti. Le velocità di acquisizione dei messaggi MQTT sono da 2 a 3 ordini di grandezza più veloci rispetto ai messaggi HTTP.

MQTT è un protocollo di trasporto di messaggistica di pubblicazione e sottoscrizione progettato per lo scambio efficiente di dati in tempo quasi reale tra sensori e dispositivi mobili. Per ulteriori informazioni, vedere OASIS Message Queuing Telemetry Transport.

MQTT esegue oltre TCP/IP e, mentre è possibile codificare direttamente su TCP/IP, è anche possibile scegliere di utilizzare una libreria che gestisce i dettagli del protocollo MQTT per voi. Sono disponibili una vasta gamma di librerie client MQTT. IBM contribuisce allo sviluppo e al supporto di diverse librerie client, comprese quelle disponibili nei seguenti siti:

Norme e requisiti

Per ulteriori informazioni sulle versioni di MQTT supportate dallo IoT strumento, consultare Standard e requisiti.

Limitazioni e limitazioni

Per ulteriori informazioni sulle restrizioni e limitazioni applicabili ai client MQTT quando sono connessi allo IoT strumento, vedere Restrizioni e limitazioni.

Sicurezza della porta

I dispositivi, i gateway e le applicazioni si connettono allo IoT strumento utilizzando il protocollo MQTT o HTTP.

Tipo di connessione Protocollo Numero di porta
Sicuro (TLS) MQTT e HTTPS 443

MQTT è supportato su TCP e WebSockets. I client MQTT si collegano utilizzando le credenziali appropriate, come token di autenticazione dei dispositivi per dispositivi e chiavi API e token per le applicazioni. Le credenziali TLS sono sempre crittografate quando inviate nei porti sicuri.

Quando si utilizza la messaggistica MQTT sicura sulla porta 443, le librerie client più recenti riconoscono automaticamente come attendibile il certificato predefinito presentato dallo IoT strumento. Se questo non è il caso del tuo ambiente client, puoi scaricare e utilizzare la catena di certificati completa da messaging.pem. Se si carica un certificato personalizzato, potrebbe essere necessario assicurarsi che l'appropriata catena di fiducia venga aggiunta al proprio ambiente client.

TLS

È necessario abilitare TLS nella propria applicazione per evitare di inviare dati insicuri.

Per ulteriori informazioni, fare riferimento ai seguenti argomenti:

Politica di fair use

In 8.10 e versioni successive, la limitazione del fair use sospende le operazioni di lettura sulle connessioni che superano il limite di connessioni. I limiti di throttling per lo IoT strumento sono specifici per ciascun dispositivo e si basano sulla classe del dispositivo, ad esempio dispositivo, gateway o applicazione. Questi limiti vengono utilizzati per prevenire attacchi Denial-of-Service ( DoS ) provenienti dai dispositivi. I limiti di throttling non sono proporzionali alle dimensioni IoT dell'implementazione dello strumento. Il throttling non si applica alle connessioni di breve durata che inviano pochi messaggi, come le connessioni per i client di messaggizzazion HTTP. Per ulteriori informazioni, consulta Quotas.

Per massimizzare la velocità di trasmissione dei messaggi, assicurati che l'applicazione di acquisizione dati dello IoT strumento distribuisca il carico su più dispositivi o applicazioni MQTT. Il IoT servizio MQTT è progettato per gestire numerose connessioni di dispositivi, ciascuno dei quali pubblica dati a bassa frequenza.

Autenticazione client MQTT

Ogni client MQTT richiede un ID client univoco. Se si tenta di collegare un client nella propria organizzazione utilizzando un ID client già connesso, la prima connessione è disconnessa.

I dispositivi e i gateway collegati direttamente allo IoT strumento visualizzano un'icona di stato sul dashboard per indicare che sono collegati. I dispositivi connessi indirettamente tramite un gateway vengono mostrati come disconnessi in quanto il pannello di controllo non è a conoscenza di dispositivi connessi tramite un gateway.

Livelli QoS (quality of service) di messaggistica (QoS)

Il protocollo MQTT fornisce tre livelli di qualità del servizio per la consegna di messaggi tra client e server. Il QoS di messaggistica specificato quando un messaggio MQTT viene pubblicato influisce direttamente sulle velocità di messaggistica. La seguente tabella descrive i livelli QoS :
Tabella 1. QoS livelli
Livello Descrizione
Al massimo una volta (QoS 0)

Il livello QoS (Quality of Service) 0 (QoS 0) è la modalità di trasferimento più rapida. Il messaggio viene consegnato al massimo una volta o potrebbe non essere consegnato affatto. La consegna nella rete non viene riconosciuta e il messaggio non viene memorizzato. Il messaggio potrebbe essere perso se il client è disconnesso o se il server fallisce.

Il protocollo MQTT non richiede che i server inoltrino le pubblicazioni a livello di QoS (quality of service) 0 a un client. Se il client è disconnesso nel momento in cui il server riceve la pubblicazione, la pubblicazione potrebbe essere eliminata, a seconda dell'implementazione del server.

Quando i dati in tempo quasi reale vengono inviati in un intervallo, utilizzare il livello di QoS (quality of service) 0. Se manca un solo messaggio, non importa davvero perché un altro messaggio che contiene i dati più recenti viene inviato poco dopo. In questo scenario, il costo extra di utilizzo di una maggiore qualità del servizio non comporta alcun beneficio tangibile.

Almeno una volta (QoS 1)

Con il livello di qualità del servizio 1 ( QoS 1), il messaggio viene sempre consegnato almeno una volta. Se si verifica un errore prima che un riconoscimento venga ricevuto dal mittente, un messaggio può essere consegnato più volte. Il messaggio deve essere memorizzato localmente al mittente fino a quando il mittente riceve la conferma che il messaggio è stato pubblicato dal destinatario. Il messaggio viene memorizzato nel caso in cui debba essere inviato nuovamente. La consegna affidabile del messaggio al broker MQTT non significa che Maximo® Monitor elaborerà il messaggio.

Esattamente una volta (QoS 2)

Il livello di servizio 2 ( QoS 2) garantisce la massima affidabilità nella consegna dei messaggi, ma è anche la modalità di trasferimento più lenta. Il messaggio viene sempre consegnato esattamente una volta e deve essere memorizzato anche localmente al mittente fino a quando il mittente riceve la conferma che il messaggio è stato pubblicato dal destinatario. Il messaggio viene memorizzato nel caso in cui debba essere inviato nuovamente. Con la qualità del livello di servizio 2, viene utilizzata una sequenza di handshake e di riconoscimento più sofisticata che per il livello 1 per garantire che i messaggi non siano duplicati. La consegna affidabile del messaggio al broker MQTT non significa che Maximo Monitor elaborerà il messaggio.

Quando si inviano comandi, se si desidera la conferma che solo il comando specificato viene agito e che verrà agito solo una volta, utilizzare la qualità del livello di servizio 2. In questo esempio, le spese generali aggiuntive del livello 2 possono essere vantaggiose rispetto agli altri livelli.

Prima di utilizzare QoS 1 e QoS 2, esaminare le seguenti considerazioni sulle prestazioni:
  • Le prestazioni I/O del disco sono fondamentali per l' QoS e 1 e l' QoS e 2, poiché questi livelli richiedono la persistenza del disco nei componenti di IoT messaggistica dello strumento.
  • La specifica MQTT fornisce una negoziazione di controllo del flusso a livello di protocollo tra client e server. Il client e il server negoziano il numero di messaggi non riconosciuti consentiti nella sessione. Se il client non dispone di alcun ID messaggio disponibile, il client deve sospendere la pubblicazione fino a quando gli ID non sono disponibili. Gli ID messaggio sono disponibili quando vengono ricevuti i riconoscimenti del messaggio (ACK). Per ulteriori informazioni, consultare la specifica MQTT standard OASIS.

Velocità di inserimento dati

Per ottenere tassi di inserimento dati più elevati, utilizza il protocollo di messaggistica MQTT e tieni aperta la connessione del dispositivo durante la pubblicazione dei messaggi.

Il seguente modello di messaggistica MQTT mantiene aperta la connessione del dispositivo fino a quando non vengono pubblicati tutti i messaggi:
MQTT CONNECT
MQTT PUBLISH
MQTT PUBLISH
MQTT PUBLISH
...
Il seguente modello di messaggistica MQTT causa la disconnessione del dispositivo tra la pubblicazione dei messaggi. Non utilizzare questo tipo di pattern. L'utilizzo di questo tipo di pattern causa una minore velocità di inserimento dei dati.
MQTT CONNECT
MQTT PUBLISH
MQTT DISCONNECT
MQTT CONNECT
MQTT PUBLISH
MQTT DISCONNECT
...

I seguenti fattori influenzano la velocità di inserimento dati:

  • Il protocollo di messaggistica. MQTT è un protocollo di volume elevato. HTTP è un protocollo a basso volume.
  • Il modello di messaggistica. Per migliorare la frequenza di inserimento dati, non chiudere le sessioni MQTT dopo la pubblicazione di ciascun messaggio. Lasciare la connessione aperta.
  • Il numero di periferiche. Per migliorare l'inserimento dei dati e la frequenza dei messaggi, distribuire il carico su più connessioni.
  • La classe periferica. Le quote di utilizzo equo si basano sulla classe periferica.
  • QoS. Livelli elevati di affidabilità della messaggistica richiedono costi più elevati.