MQTT - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

MQTT

MQTT (Message Queuing Telemetry Transport) è un protocollo di messaggistica leggero e ampiamente adottato, progettato per dispositivi vincolati. Il supporto AWS IoT Core per MQTT si basa sulla specifica MQTT v3.1.1 e la specifica MQTT v5.0, con alcune differenze come documentato in AWS IoT differenze rispetto alle specifiche MQTT. Essendo la versione più recente dello standard, MQTT 5 introduce diverse funzionalità chiave che rendono un sistema basato su MQTT più affidabile, inclusi nuovi miglioramenti della scalabilità, segnalazione degli errori migliorata con risposte codice motivo, timer di scadenza dei messaggi e delle sessioni e intestazioni messaggi utente personalizzate. Per ulteriori informazioni sulle funzionalità supportate da MQTT 5, consultate Funzionalità AWS IoT Core supportate da MQTT 5. AWS IoT Core supporta anche la comunicazione tra versioni MQTT (MQTT 3 e MQTT 5). Un autore MQTT 3 può inviare un messaggio MQTT 3 a un sottoscrittore MQTT 5 che riceverà un messaggio di pubblicazione MQTT 5, e viceversa.

AWS IoT Core supporta connessioni di dispositivi che utilizzano il protocollo MQTT e il protocollo MQTT over WSS e che sono identificate da un ID client. AWS IoT SDK per dispositivi supportano entrambi i protocolli e sono i modi consigliati per connettere i dispositivi a AWS IoT Core. I AWS IoT Device SDK supportano le funzioni necessarie per consentire a dispositivi e client di connettersi e accedere ai servizi. AWS IoT I Device SDK supportano i protocolli di autenticazione richiesti dai AWS IoT servizi e i requisiti di ID di connessione richiesti dal protocollo MQTT e dai protocolli MQTT su WSS. Per informazioni su come connettersi AWS IoT utilizzando gli SDK del AWS dispositivo e collegamenti ad esempi AWS IoT nelle lingue supportate, vedere. Connessione con MQTT utilizzando gli SDK del dispositivo AWS IoT Per ulteriori informazioni sull’autenticazione e sulla mappatura delle porte per i messaggi MQTT, consulta Protocolli, mappature delle porte e autenticazione.

Sebbene consigliamo di utilizzare gli SDK del AWS IoT dispositivo a cui connettersi AWS IoT, non sono necessari. Se non utilizzi gli SDK del AWS IoT dispositivo, tuttavia, devi fornire la necessaria sicurezza di connessione e comunicazione. I client devono inoltre inviare la Estensione TLS di Server Name Indication per impedire che le connessioni vengano rifiutate. I tentativi di connessione che non includono l'SNI vengono rifiutati. Per ulteriori informazioni, consulta Transport Security in AWS IoT. I client che utilizzano utenti e AWS credenziali IAM per autenticare i client devono fornire l'autenticazione Signature Version 4 corretta.

Connessione con MQTT utilizzando gli SDK del dispositivo AWS IoT

Questa sezione contiene collegamenti agli SDK del AWS IoT dispositivo e al codice sorgente di programmi di esempio che illustrano come collegare un dispositivo a. AWS IoT Le app di esempio collegate qui mostrano come connettersi AWS IoT utilizzando il protocollo MQTT e MQTT tramite WSS.

Nota

I AWS IoT Device SDK hanno rilasciato un client MQTT 5.

C++

Utilizzo del AWS IoT C++ Device SDK per connettere i dispositivi

Python

Utilizzo del AWS IoT Device SDK per Python per connettere i dispositivi

JavaScript

Utilizzo del AWS IoT Device SDK per connettere i dispositivi JavaScript

Java

Utilizzo del AWS IoT Device SDK for Java per connettere i dispositivi

Nota

Il AWS IoT Device SDK for Java v2 ora supporta lo sviluppo Android. Per ulteriori informazioni, consulta AWS IoT Device SDK for Android.

Embedded C

Utilizzo del AWS IoT Device SDK for Embedded C per connettere i dispositivi

Importante

Questo SDK è destinato all'uso da parte di sviluppatori esperti di software integrato.

Opzioni di qualità del servizio MQTT (QoS)

AWS IoT e gli SDK del AWS IoT dispositivo supportano i livelli di qualità del servizio (QoS) MQTT e. 0 1 Il protocollo MQTT definisce un terzo livello di QoS, 2 livello, AWS IoT ma non lo supporta. Solo il protocollo MQTT supporta la caratteristica QoS. HTTPS supporta QoS passando un parametro di stringa di query ?qos=qos dove il valore può essere 0 o 1.

Questa tabella descrive come ogni livello QoS influisce sui messaggi pubblicati da e per il broker messaggi.

Con un livello QoS di...

Il messaggio è...

Commenti

QoS livello 0

Inviato zero o più volte

Questo livello deve essere utilizzato per i messaggi inviati tramite collegamenti di comunicazione affidabili o che possono essere persi senza problemi.

Livello QoS 1

Inviato almeno una volta e poi ripetutamente fino a quando non si riceve una risposta PUBACK

Il messaggio non viene considerato completo fino a quando il mittente non riceve una risposta PUBACK per indicare la riuscita della consegna.

Sessioni persistenti MQTT

Le sessioni persistenti archiviano le sottoscrizioni e i messaggi di un client, con una qualità del servizio (QoS) pari a 1, che non sono stati riconosciuti dal client. Quando il dispositivo si riconnette a una sessione persistente, la sessione riprende, le relative sottoscrizioni vengono reintegrate e i messaggi sottoscritti non riconosciuti ricevuti e archiviati prima della riconnessione vengono inviati al client.

L'elaborazione dei messaggi archiviati viene registrata in and Logs. CloudWatch CloudWatch Per informazioni sulle voci scritte in CloudWatch and CloudWatch Logs, vedere Parametri del broker di messaggi e. Voce di log Queued

Creazione di una sessione persistente

In MQTT3, è possibile creare una sessione persistente MQTT inviando un messaggio CONNECT e impostando il flag cleanSession su 0. Se non esiste alcuna sessione per il client che invia il messaggio CONNECT, viene creata una nuova sessione persistente. Se esiste una sessione per il client, il client riprende la sessione esistente. Per creare una sessione pulita, è possibile inviare un messaggio CONNECT e impostare il flag cleanSession su 1. Il broker non memorizzerà alcuno stato della sessione quando il client si disconnette.

In MQTT 5, è possibile gestire le sessioni persistenti impostando il flag Clean Start e Session Expiry Interval. Avvio pulito controlla l'inizio della sessione di connessione e la fine della sessione precedente. Quando si imposta Clean Start = 1, viene creata una nuova sessione e una sessione precedente viene terminata, se esiste. Quando si imposta Clean Start= 0, la sessione di connessione riprende una sessione precedente, se esiste. L'intervallo di scadenza della sessione controlla la fine della sessione di connessione. L'intervallo di scadenza della sessione specifica il tempo, in secondi (numero intero a 4 byte), di persistenza di una sessione dopo la disconnessione. L'impostazione Session Expiry interval=0 causa la terminazione immediata della sessione dopo la disconnessione. Se l'intervallo di scadenza della sessione non è specificato nel messaggio CONNECT, il valore predefinito è 0.

Avvio pulito e scadenza della sessione MQTT 5
Valore proprietà Descrizione
Clean Start= 1 Crea una nuova sessione e termina una sessione precedente, se una esiste.
Clean Start= 0 Ripristina una sessione, se esiste una sessione precedente.
Session Expiry Interval> 0 Mantiene una sessione.
Session Expiry interval= 0 Non mantiene una sessione.

In MQTT 5, se si imposta Clean Start = 1 e Session Expiry Interval = 0, questo è l'equivalente di una sessione pulita MQTT 3. Se si imposta Clean Start = 0 e Session Expiry Interval> 0, è l'equivalente di una sessione persistente MQTT 3.

Nota

Le sessioni persistenti tra versioni MQTT (MQTT 3 e MQTT 5) non sono supportate. Una sessione persistente MQTT 3 non può essere ripristinata come una sessione MQTT 5, e viceversa.

Operazioni durante una sessione persistente

I dispositivi utilizzano l'attributo sessionPresent nel messaggio CONNACK (Connection Acknowledged) per determinare l'eventuale presenza di una sessione persistente. Se sessionPresent è 1, è presente una sessione persistente e tutti i messaggi archiviati per il client vengono distribuiti al client dopo che il client riceve il CONNACK, come descritto in Traffico dei messaggi dopo la riconnessione a una sessione persistente. Se sessionPresent è impostato su 1, non è necessario che il client esegua di nuovo la sottoscrizione. Se sessionPresent è impostato su 0, non è presente alcuna sessione persistente e il client deve eseguire nuovamente la sottoscrizione nei filtri degli argomenti.

Dopo che il client si unisce ad una sessione persistente, può pubblicare messaggi e sottoscrivere filtri argomento senza ulteriori flag in ogni operazione.

Traffico dei messaggi dopo la riconnessione a una sessione persistente

Una sessione persistente rappresenta una connessione continua tra un cliente e un broker di messaggi MQTT. Quando un client si connette a un broker di messaggi utilizzando una sessione persistente, il broker di messaggi salva tutte le sottoscrizioni che il client effettua durante la connessione. Quando il client si disconnette, il broker di messaggi archivia i messaggi QoS 1 non riconosciuti e i nuovi messaggi QoS 1 pubblicati in argomenti di cui il client ha eseguito la sottoscrizione. I messaggi vengono archiviati in base al limite dell'account. I messaggi che superano il limite verranno eliminati. Per ulteriori informazioni sui limiti dei messaggi persistenti, consulta Endpoint e quote di AWS IoT Core. Quando il client si riconnette alla sessione persistente, tutte le sottoscrizioni vengono ripristinate e tutti i messaggi archiviati vengono inviati al client a una velocità massima di 10 messaggi al secondo. In MQTT 5, se un QoS1 in uscita con l'Intervallo scadenza messaggio scade quando un client è offline, dopo che la connessione viene ripristinata, il client non riceverà il messaggio scaduto.

Dopo la riconnessione, i messaggi archiviati vengono inviati al client, a una velocità limitata di 10 messaggi archiviati al secondo, insieme a qualsiasi traffico di messaggi corrente fino a quando il limite di Publish requests per second per connection viene raggiunto. Poiché la velocità di distribuzione dei messaggi archiviati è limitata, ci vorranno alcuni secondi per distribuire tutti i messaggi archiviati se una sessione ha più di 10 messaggi archiviati da distribuire dopo la riconnessione.

Termine di una sessione persistente

Le sessioni persistenti possono terminare nei modi seguenti:

  • Il tempo di scadenza della sessione persistente è trascorso. Il timer di scadenza della sessione persistente inizia quando il broker messaggi rileva che un client si è disconnesso, tramite la disconnessione del client o il timeout della connessione.

  • Il client invia un messaggio CONNECT che imposta il flag cleanSession su 1.

In MQTT 3, il valore predefinito del tempo di scadenza delle sessioni persistenti è un'ora e si applica a tutte le sessioni nell'account.

In MQTT 5, è possibile impostare Intervallo di scadenza della sessione per ogni sessione sui pacchetti CONNECT e DISCONNECT.

Per intervallo di scadenza della sessione sul pacchetto DISCONNECT:

  • Se l'intervallo di scadenza della sessione corrente è impostato su 0, non è possibile impostare un intervallo di scadenza della sessione su un valore maggiore di 0 sul pacchetto DISCONNECT.

  • Se l'intervallo di scadenza della sessione corrente è maggiore di 0 e si imposta l'intervallo di scadenza della sessione su 0 nel pacchetto DISCONNECT, la sessione verrà terminata su DISCONNECT.

  • In caso contrario, l'Intervallo di scadenza della sessione sul pacchetto DISCONNECT aggiornerà l'Intervallo di scadenza della sessione corrente.

Nota

I messaggi archiviati in attesa di essere inviati al client al termine di una sessione vengono eliminati; tuttavia, vengono comunque fatturati alla tariffa standard di messaggistica, anche se non è stato possibile inviarli. Per ulteriori informazioni sui prezzi delle prenotazioni, consulta Prezzi di AWS IoT Core. È possibile configurare l'intervallo del tempo di scadenza.

Riconnessione dopo la scadenza di una sessione persistente

Se un client non si riconnette alla sessione persistente prima della scadenza, la sessione termina e i messaggi archiviati vengono eliminati. Quando un client si riconnette dopo la scadenza della sessione e imposta il flag cleanSession su 0, il servizio crea una nuova sessione persistente. Gli abbonamenti o i messaggi della sessione precedente non sono disponibili per questa sessione perché sono stati scartati alla scadenza della sessione precedente.

Addebito dei messaggi di sessione persistente

I messaggi vengono addebitati all'utente Account AWS quando il broker di messaggi invia un messaggio a un cliente o a una sessione persistente offline. Quando un dispositivo offline con una sessione persistente si riconnette e riprende la sessione, i messaggi archiviati vengono recapitati al dispositivo e vengono nuovamente addebitati sul tuo account. Per ulteriori informazioni sui prezzi dei messaggi, consulta AWS IoT Core pricing - Messagging (Prezzi di Amazon IoT Core - Messaggistica).

Si può aumentare il tempo di scadenza predefinito di un’ora della sessione persistente utilizzando il processo di aumento del limite standard. Si noti che l'aumento del tempo di scadenza della sessione potrebbe aumentare gli addebiti dei messaggi. Infatti, il tempo aggiuntivo potrebbe consentire l'archiviazione di più messaggi per il dispositivo offline e tali messaggi aggiuntivi verranno addebitati all'account alla tariffa di messaggistica standard. Il tempo di scadenza della sessione è approssimativo e una sessione potrebbe persistere fino a 30 minuti più a lungo rispetto al limite dell'account; tuttavia, una sessione non può essere inferiore al limite dell'account. Per ulteriori informazioni sui limiti di sessione, consulta Service Quotas di AWS.

Messaggi conservati da MQTT

AWS IoT Core supporta il flag RETAIN descritto nel protocollo MQTT. Quando un client imposta il flag RETAIN su un messaggio MQTT che pubblica, AWS IoT Core salva il messaggio. Può quindi essere inviato a nuovi sottoscrittori, recuperato chiamando l'operazione GetRetainedMessage e visualizzato nella console AWS IoT.

Esempi di utilizzo di messaggi conservati da MQTT
  • Come messaggio di configurazione iniziale

    I messaggi conservati MQTT vengono inviati a un client dopo che il client si è sottoscritto a un argomento. Se desiderate che tutti i client che sottoscrivono un argomento ricevano il messaggio MQTT mantenuto subito dopo la sottoscrizione, potete pubblicare un messaggio di configurazione con il flag RETAIN impostato. I client sottoscrittori ricevono anche aggiornamenti di tale configurazione ogni volta che viene pubblicato un nuovo messaggio di configurazione.

  • Come ultimo messaggio di stato noto

    I dispositivi possono impostare il flag RETAIN sui messaggi sullo stato corrente in modo che AWS IoT Core li salverà. Quando le applicazioni si connettono o si riconnettono, possono iscriversi a questo argomento e visualizzare l'ultimo stato segnalato subito dopo la sottoscrizione all'argomento del messaggio memorizzato. In questo modo possono evitare di dover attendere il prossimo messaggio dal dispositivo per vedere lo stato corrente.

Attività comuni con MQTT ha conservato i messaggi in AWS IoT Core

AWS IoT Core salva i messaggi MQTT con il flag RETAIN impostato. Questi messaggi conservati vengono inviati a tutti i client che hanno sottoscritto l'argomento, come un normale messaggio MQTT, e vengono archiviati anche per essere inviati ai nuovi sottoscrittori all'argomento.

I messaggi conservati MQTT richiedono azioni di policy specifiche per autorizzare i client ad accedervi. Per esempi di utilizzo di policy dei messaggi conservati, consulta Esempi di policy per i messaggi conservati.

Questa sezione descrive le operazioni comuni che comportano messaggi conservati.

  • Creazione di un messaggio conservato

    Il client determina se un messaggio viene conservato quando pubblica un messaggio MQTT. I client possono impostare il flag RETAIN quando pubblicano un messaggio utilizzando un SDK di dispositivo. Applicazioni e servizi possono impostare il flag RETAIN quando utilizzano l'azione Publish per pubblicare un messaggio MQTT.

    Viene conservato un solo messaggio per nome argomento. Un nuovo messaggio con il flag RETAIN impostato pubblicato su un argomento sostituisce qualsiasi messaggio conservato esistente inviato all'argomento in precedenza.

    NOTA: Non puoi pubblicare su un argomento riservato con il set di bandiere RETAIN.

  • Iscrizione di un argomento del messaggio conservato

    I clienti si iscrivono agli argomenti dei messaggi conservati come qualsiasi altro argomento del messaggio MQTT. I messaggi conservati ricevuti sottoscrivendo un argomento del messaggio conservato hanno impostato il flag RETAIN.

    I messaggi conservati vengono eliminati AWS IoT Core quando un client pubblica un messaggio conservato con un payload di messaggi da 0 byte nell'argomento del messaggio mantenuto. I client che hanno sottoscritto l'argomento del messaggio conservato riceveranno anche il messaggio da 0 byte.

    La sottoscrizione a un filtro argomento jolly che include un argomento del messaggio conservato consente al client di ricevere messaggi successivi pubblicati sull'argomento del messaggio conservato, ma non recapita il messaggio conservato al momento della sottoscrizione.

    NOTA: per ricevere un messaggio conservato al momento della sottoscrizione, il filtro argomento nella richiesta di sottoscrizione deve corrispondere esattamente all'argomento del messaggio conservato.

    I messaggi conservati ricevuti dopo la sottoscrizione a un argomento del messaggio conservato hanno impostato il flag RETAIN. I messaggi conservati ricevuti da un cliente abbonato dopo l'abbonamento non lo hanno.

  • Recupero di un messaggio conservato

    I messaggi conservati vengono recapitati automaticamente ai client quando si sottoscrivono all'argomento con il messaggio conservato. Affinché un cliente riceva il messaggio conservato al momento dell'abbonamento, deve sottoscrivere il nome esatto dell'argomento del messaggio conservato. La sottoscrizione a un filtro argomento jolly che include un argomento del messaggio conservato consente al client di ricevere messaggi successivi pubblicati sull'argomento del messaggio conservato, ma non recapita il messaggio conservato al momento della sottoscrizione.

    I servizi e le app possono elencare e recuperare i messaggi conservati chiamando ListRetainedMessages e GetRetainedMessage.

    A un client non viene impedito di pubblicare messaggi su un argomento del messaggio conservato senza impostazione del flag RETAIN. Ciò potrebbe causare risultati imprevisti, ad esempio il messaggio conservato che non corrisponde al messaggio ricevuto sottoscrivendo l'argomento.

    Con MQTT 5, se in un messaggio conservato l'intervallo di scadenza del messaggio è impostato e il messaggio conservato scade, un nuovo sottoscrittore che effettua la sottoscrizione a quell'argomento non riceverà il messaggio conservato al termine della sottoscrizione.

  • Elenco di argomenti di messaggio conservati

    È possibile elencare i messaggi conservati chiamando ListRetainedMessages e i messaggi conservati possono essere visualizzati nella console AWS IoT.

  • Ricevere i dettagli del messaggio conservati

    È possibile ottenere i dettagli del messaggio conservati chiamando GetRetainedMessage e possono essere visualizzati nella console AWS IoT.

  • Conservazione di un messaggio Will

    I messaggi Will MQTT che vengono creati quando un dispositivo si connette può essere conservato impostando flag Will Retain nel campo Connect Flag bits.

  • Eliminazione di un messaggio conservato

    Dispositivi, applicazioni e servizi possono eliminare un messaggio conservato pubblicando un messaggio con il flag RETAIN impostato e un payload vuoto (0 byte) per il nome dell'argomento del messaggio conservato da eliminare. Tali messaggi eliminano il messaggio conservato da AWS IoT Core, vengono inviati ai client con un abbonamento all'argomento, ma non vengono conservati da. AWS IoT Core

    I messaggi conservati possono anche essere eliminati in modo interattivo accedendo al messaggio conservato nella console AWS IoT. Messaggi conservati che vengono eliminati utilizzando la console AWS IoTinviano anche un messaggio a 0 byte ai client che hanno sottoscritto l'argomento del messaggio conservato.

    I messaggi conservati non possono essere ripristinati dopo che sono stati eliminati. Un client dovrebbe pubblicare un nuovo messaggio conservato per sostituire il messaggio eliminato.

  • Debugging e risoluzione dei problemi dei messaggi conservati

    La console AWS IoT fornisce diversi strumenti per aiutarti a risolvere i problemi dei messaggi conservati:

    • La pagina Messaggi conservati

      La pagina Messaggi conservati nella console AWS IoT fornisce un elenco impaginato dei messaggi conservati che sono stati memorizzati dal tuo Account nella regione corrente. In questa pagina, è possibile:

      • Visualizzare i dettagli di ogni messaggio conservato, ad esempio il payload del messaggio, il QoS, l'ora in cui è stato ricevuto.

      • Aggiornare il contenuto di un messaggio conservato.

      • Eliminare un messaggio conservato.

    • Il client di test MQTT

      La pagina Client di test MQTT nella console AWS IoT può iscriversi e pubblicare argomenti MQTT. L'opzione di pubblicazione consente di impostare il flag RETAIN sui messaggi pubblicati per simulare il comportamento dei dispositivi.

    Alcuni risultati inaspettati potrebbero essere il risultato di questi aspetti del modo in cui vengono implementati i messaggi conservati. AWS IoT Core

    • Limiti di messaggi conservati

      Quando un account ha archiviato il numero massimo di messaggi conservati, AWS IoT Core restituisce una risposta limitata ai messaggi pubblicati con il set RETAIN e carica più di 0 byte fino a quando alcuni messaggi conservati non vengono eliminati e il numero di messaggi conservati non scende al di sotto del limite.

    • Ordine di consegna dei messaggi conservati

      La sequenza di messaggi conservati e di recapito del messaggio sottoscritto non è garantita.

Messaggi di fatturazione e conservati

La pubblicazione di messaggi con il flag RETAIN impostato da un client, utilizzando la console AWS IoT o chiamando Publish comporta costi aggiuntivi di messaggistica descritti nella sezione Prezzi di AWS IoT Core - Messaggistica.

Il recupero dei messaggi conservati da un client, utilizzando la AWS IoT console o chiamando comporta costi di messaggistica oltre ai normali GetRetainedMessagecosti di utilizzo dell'API. I costi aggiuntivi sono descritti nella sezione Prezzi di AWS IoT Core - Messaggistica.

I messaggi Will MQTT che vengono pubblicati quando un dispositivo si disconnette inaspettatamente comportano i costi di messaggistica descritti in Prezzi di AWS IoT Core - Messaggistica.

Per ulteriori informazioni sui prezzi dei messaggi, consulta la sezione Prezzi di AWS IoT Core - Messaggistica.

Confronto tra i messaggi conservati MQTT e le sessioni persistenti MQTT

I messaggi conservati e le sessioni persistenti sono caratteristiche standard di MQTT che consentono ai dispositivi di ricevere messaggi pubblicati mentre erano offline. I messaggi conservati possono essere pubblicati da sessioni persistenti. In questa sezione vengono descritti gli aspetti chiave di queste caratteristiche e come funzionano insieme.

Messaggi conservati

Sessioni persistenti

Caratteristiche principali

I messaggi conservati possono essere utilizzati per configurare o notificare grandi gruppi di dispositivi dopo la connessione.

I messaggi conservati possono essere utilizzati anche quando si desidera che i dispositivi ricevano solo l'ultimo messaggio pubblicato su un argomento dopo una riconnessione.

Le sessioni persistenti sono utili per i dispositivi con connettività intermittente e potrebbero mancare diversi messaggi importanti.

I dispositivi possono connettersi a una sessione persistente per ricevere messaggi inviati mentre sono offline.

Examples (Esempi)

I messaggi conservati possono fornire informazioni sulla configurazione dei dispositivi sul loro ambiente quando vengono online. La configurazione iniziale potrebbe includere un elenco di altri argomenti di messaggio a cui deve sottoscrivere o informazioni su come configurare il fuso orario locale.

I dispositivi che si connettono su una rete cellulare con connettività intermittente potrebbero utilizzare sessioni persistenti per evitare di perdere messaggi importanti inviati mentre un dispositivo è fuori copertura di rete o deve spegnere la radio cellulare.

Messaggi ricevuti durante la sottoscrizione iniziale a un argomento

Dopo aver sottoscritto un argomento con un messaggio conservato, viene ricevuto il messaggio conservato più recente.

Dopo aver effettuato la sottoscrizione a un argomento senza un messaggio conservato, non viene ricevuto alcun messaggio finché non viene pubblicato sull'argomento.

Argomenti iscritti dopo la riconnessione

Senza una sessione persistente, il client deve iscriversi agli argomenti dopo la riconnessione.

Gli argomenti sottoscritti vengono ripristinati dopo la riconnessione.

Messaggi ricevuti dopo la riconnessione

Dopo aver sottoscritto un argomento con un messaggio conservato, viene ricevuto il messaggio conservato più recente.

Tutti i messaggi pubblicati con QOS = 1 e sottoscritti con un QOS =1 mentre il dispositivo è stato disconnesso vengono inviati dopo la riconnessione del dispositivo.

Scadenza della sessione/dati

In MQTT 3, i messaggi conservati non scadono. Sono archiviati fino a quando non vengono sostituiti o eliminati. In MQTT 5, i messaggi conservati scadono dopo l'intervallo di scadenza dei messaggi impostato. Per ulteriori informazioni, consulta Scadenza dei messaggi.

Le sessioni persistenti scadono se il client non si riconnette entro il periodo di timeout. Dopo la scadenza di una sessione persistente, vengono eliminati gli abbonamenti e i messaggi salvati del client pubblicati con un QOS = 1 e sottoscritti con un QOS =1 mentre il dispositivo è stato disconnesso. I messaggi scaduti non verranno distribuiti. Per ulteriori informazioni sulle scadenze di sessione con sessioni persistenti, consulta Sessioni persistenti MQTT.

Per informazioni sulle sessioni persistenti, consulta Sessioni persistenti MQTT.

Con i messaggi mantenuti, il client di pubblicazione determina se un messaggio deve essere conservato e recapitato a un dispositivo dopo la connessione, indipendentemente dal fatto che abbia avuto una sessione precedente o meno. La scelta di archiviare un messaggio viene effettuata dall'editore e il messaggio archiviato viene recapitato a tutti i client attuali e futuri che si iscrivono con un abbonamento QoS 0 o QoS 1. I messaggi conservati conservano un solo messaggio su un determinato argomento alla volta.

Quando un account ha archiviato il numero massimo di messaggi conservati, AWS IoT Core restituisce una risposta limitata ai messaggi pubblicati con impostazione RETAIN e payload superiori a 0 byte fino a quando alcuni messaggi conservati non vengono eliminati e il conteggio dei messaggi conservati scende al di sotto del limite.

Messaggi e Device Shadow conservati da MQTT AWS IoT

I messaggi conservati e i Device Shadow conservano entrambi i dati da un dispositivo, ma si comportano in modo diverso e hanno scopi diversi. In questa sezione vengono descritti somiglianze e differenze.

Messaggi conservati

Dispositivi ombra

Il payload del messaggio ha una struttura o uno schema predefinito

Come definito dall'implementazione. MQTT non specifica una struttura o uno schema per il payload dei messaggi.

AWS IoT supporta una struttura dati specifica.

L'aggiornamento del payload del messaggio genera messaggi di evento

La pubblicazione di un messaggio conservato invia il messaggio ai client sottoscritti, ma non genera ulteriori messaggi di aggiornamento.

L'aggiornamento di un Device Shadow produce messaggi di aggiornamento che descrivono la modifica.

Gli aggiornamenti dei messaggi sono numerati

I messaggi conservati non vengono numerati automaticamente. I documenti Device Shadow hanno numeri di versione e timestamp automatici.

Il payload dei messaggi è collegato a una risorsa oggetto

I messaggi conservati non sono allegati a una risorsa oggetto.

I Device Shadow Device Shadow sono collegati a una risorsa oggetto.

Aggiornamento di singoli elementi del payload del messaggio

I singoli elementi del messaggio non possono essere modificati senza aggiornare l'intero payload del messaggio.

I singoli elementi di un documento Device Shadow possono essere aggiornati senza dover aggiornare l'intero documento Device Shadow.

Il client riceve i dati dei messaggi al momento dell'sottoscrizione

Il client riceve automaticamente un messaggio conservato dopo aver sottoscritto un argomento con un messaggio conservato.

I client possono iscriversi agli aggiornamenti Device Shadow, ma devono richiedere deliberatamente lo stato corrente.

Indicizzazione e ricercabilità

I messaggi conservati non sono indicizzati per la ricerca.

L'indicizzazione del parco istanze indicizza i dati di Device Shadow per la ricerca e l'aggregazione.

Messaggi MQTT Last Will and Testament (LWT)

Last Will and Testament (LWT) è una funzionalità di MQTT. Con LWT, i clienti possono specificare un messaggio che il broker pubblicherà su un argomento definito dal client e invierà a tutti i client che hanno sottoscritto l'argomento quando si verifica una disconnessione non iniziata. Il messaggio specificato dai client è chiamato messaggio LWT o messaggio Will e l'argomento definito dai client viene definito argomento Will. Puoi specificare un messaggio LWT quando un dispositivo si connette al broker. Questi messaggi possono essere conservati impostando il flag Will Retain nel campo Connect Flag bits durante la connessione. Ad esempio, se il flag Will Retain è impostato su 1, un messaggio Will verrà archiviato nel broker nell’argomento Will associato. Per ulteriori informazioni, consulta Messaggi Will.

Il broker memorizzerà i messaggi Will fino a quando non si verificherà una disconnessione non avviata. Quando ciò accade, il broker pubblicherà i messaggi a tutti i clienti che si sono iscritti all’argomento Will per notificare la disconnessione. Se il client si disconnette dal broker con una disconnessione avviata dal client utilizzando il messaggio MQTT DISCONNECT, il broker non pubblicherà i messaggi LWT memorizzati. In tutti gli altri casi, i messaggi LWT verranno inviati. Per un elenco completo degli scenari di disconnessione in cui il broker invierà i messaggi LWT, vediEventi di connessione/disconnessione.

Utilizzo degli Attributi Connect

ConnectAttributes consentono di specificare quali attributi si desidera utilizzare nel messaggio di connessione delle policy IAM, ad esempio PersistentConnect e LastWill. Con ConnectAttributes, puoi creare criteri che non consentono ai dispositivi di accedere alle nuove funzionalità per impostazione predefinita, cosa che può essere utile in caso di compromissione di un dispositivo.

connectAttributes supporta le caratteristiche seguenti:

PersistentConnect

Utilizzo del PersistentConnect per salvare tutte le sottoscrizioni che il client effettua durante la connessione quando essa viene interrotta tra il client e il broker.

LastWill

Utilizzo del LastWill per pubblicare un messaggio nel LastWillTopic quando un client si disconnette in modo imprevisto.

Per impostazione predefinita, la policy dispone di una connessione non persistente e non esistono attributi passati per questa connessione. È necessario specificare una connessione permanente nella policy IAM se si desidera averne una.

Per esempi di ConnectAttributes, consulta Esempi di policy di connessione.

Caratteristiche supportate da MQTT 5

AWS IoT Core il supporto per MQTT 5 si basa sulla specifica MQTT v5.0 con alcune differenze, come documentato in. AWS IoT differenze rispetto alle specifiche MQTT

Sottoscrizioni condivise

AWS IoT Core supporta sottoscrizioni condivise sia per MQTT 3 che per MQTT 5. Sottoscrizioni condivise consentono a più client di condividere una sottoscrizione a un argomento e solo un client riceverà i messaggi pubblicati su tale argomento utilizzando una distribuzione casuale. Sottoscrizioni condivise possono bilanciare efficacemente il carico di messaggi MQTT tra più abbonati. Ad esempio, si supponga di avere 1.000 dispositivi che pubblicano sullo stesso argomento e 10 applicazioni di back-end che elaborano tali messaggi. In tal caso, le applicazioni di back-end possono effettuare la sottoscrizione allo stesso argomento e ciascuna riceve in modo casuale i messaggi pubblicati dai dispositivi sull'argomento condiviso. Questo consente effettivamente di "condividere" il carico di tali messaggi. Sottoscrizioni condivise consentono anche una migliore resilienza. Quando un'applicazione di back-end si disconnette, il broker distribuisce il carico agli abbonati rimanenti nel gruppo.

Per utilizzare Sottoscrizioni condivise, i client effettuano la sottoscrizione al filtro di argomenti di una Sottoscrizione condivisa come illustrato di seguito:

$share/{ShareName}/{TopicFilter}
  • $share è una stringa letterale per indicare il filtro di argomenti di una Sottoscrizione condivisa, che deve iniziare con $share.

  • {ShareName} è una stringa di caratteri per specificare il nome condiviso utilizzato da un gruppo di abbonati. Il filtro di argomenti di una Sottoscrizione condivisa deve contenere un ShareName ed essere seguito dal carattere /. Il {ShareName} non deve includere i seguenti caratteri: /, + o#. La dimensione massima per {ShareName} è di 128 byte.

  • {TopicFilter} segue la stessa sintassi filtro per argomento come abbonamento non condiviso. La dimensione massima per {TopicFilter} è di 256 byte.

  • Le due barre obbligatorie (/) per $share/{ShareName}/{TopicFilter} non sono incluse nel limite Numero massimo di barre negli argomenti e nel filtro argomenti.

Le sottoscrizioni che hanno lo stesso {ShareName}/{TopicFilter} appartengono allo stesso gruppo di Sottoscrizioni condivise. È possibile creare più gruppi di Sottoscrizioni condivise e non superare il limite di Sottoscrizioni condivise per gruppo. Per ulteriori informazioni, consulta Endpoint e quote di AWS IoT Core nella Documentazione generale di riferimento di AWS .

Nelle tabelle seguenti vengono confrontate le Sottoscrizioni non condivise e le Sottoscrizioni condivise:

Subscription Descrizione Esempi di filtro di argomenti
Sottoscrizioni non condivise Ogni client crea una sottoscrizione separata per ricevere i messaggi pubblicati. Quando un messaggio viene pubblicato su un argomento, tutti gli abbonati a tale argomento ricevono una copia del messaggio.
sports/tennis sports/#
Sottoscrizioni condivise Più client possono condividere una sottoscrizione a un argomento e solo un client riceverà i messaggi pubblicati su tale argomento utilizzando una distribuzione casuale.
$share/consumer/sports/tennis $share/consumer/sports/#
Flusso di sottoscrizioni non condivise Flusso di sottoscrizioni condivise
Abbonamenti regolari per MQTT 3 e MQTT 5 in. AWS IoT Core
Abbonamenti condivisi per MQTT 3 e MQTT 5 in. AWS IoT Core

Note importanti per l'utilizzo di sottoscrizioni condivise

  • Quando un tentativo di pubblicazione su un abbonato QoS0 non va a buon fine, non verrà effettuato alcun nuovo tentativo di ripetizione e il messaggio verrà rimosso.

  • Quando un tentativo di pubblicazione su un abbonato QoS1 con sessione pulita non va a buon fine, il messaggio verrà inviato a un altro abbonato del gruppo per più tentativi di ripetizione. I messaggi che non vengono consegnati dopo tutti i tentativi di ripetizione verranno rimossi.

  • Quando un tentativo di pubblicazione su un abbonato QoS1 con sessioni persistenti non va a buon fine perché l'abbonato è offline, i messaggi non verranno accodati e verrà eseguito un tentativo su un altro abbonato del gruppo. I messaggi che non vengono consegnati dopo tutti i tentativi di ripetizione verranno rimossi.

  • Le sottoscrizioni condivise non ricevono messaggi conservati.

  • Quando Sottoscrizioni condivise contengono caratteri jolly (# o +), potrebbero esserci più Sottoscrizioni condivise corrispondenti a un argomento. In tal caso, il broker di messaggi copia il messaggio di pubblicazione e lo invia a un client casuale in ogni Sottoscrizione condivisa corrispondente. Il comportamento dei caratteri jolly di Sottoscrizioni condivise può essere spiegato nel diagramma seguente.

    Abbonamenti condivisi con caratteri jolly in. AWS IoT Core

    In questo esempio, ci sono tre Sottoscrizioni condivise corrispondenti all'argomento MQTT di pubblicazione sports/tennis. Il broker di messaggi copia il messaggio pubblicato e lo invia a un client casuale in ciascun gruppo corrispondente.

    Client 1 e client 2 condividono la sottoscrizione: $share/consumer1/sports/tennis

    Client 3 e client 4 condividono la sottoscrizione: $share/consumer1/sports/#

    Client 5 e client 6 condividono la sottoscrizione: $share/consumer2/sports/tennis

Per ulteriori informazioni sui limiti di Sottoscrizioni condivise, consultare Endpoint e quote di AWS IoT Core nella Documentazione generale di riferimento di AWS . Per testare gli abbonamenti condivisi utilizzando il client AWS IoT MQTT nella console, vedere.AWS IoT Test delle sottoscrizioni condivise nel client MQTT Per ulteriori informazioni su Sottoscrizioni condivise, consultare Sottoscrizioni condivise nelle specifiche MQTTv5.0.

Avvio pulito e scadenza della sessione

È possibile utilizzare Avvio pulito e Scadenza della sessione per gestire le sessioni persistenti con maggiore flessibilità. Un flag Avvio pulito indica se la sessione deve iniziare senza utilizzare una sessione esistente. Un intervallo di scadenza della sessione indica per quanto tempo mantenere la sessione dopo una disconnessione. L'intervallo di scadenza della sessione può essere modificato al momento della disconnessione. Per ulteriori informazioni, consulta Sessioni persistenti MQTT.

Codice motivo su tutti gli ACK

È possibile eseguire il debug o elaborare i messaggi di errore più facilmente utilizzando i codici motivo. I codici motivo vengono restituiti dal broker di messaggi in base al tipo di interazione con il broker (sottoscrizione, pubblicazione, conferma). Per ulteriori informazioni, consulta Codici motivo MQTT. Per un elenco completo dei codici motivo MQTT, consulta Specifiche MQTT v5.

Alias argomento

È possibile sostituire un nome argomento con un alias argomento, che è un numero intero a due byte. L'utilizzo degli alias degli argomenti può ottimizzare la trasmissione dei nomi degli argomenti per ridurre potenzialmente i costi dei dati sui servizi di dati misurati. AWS IoT Core ha un limite predefinito di 8 alias tematici. Per ulteriori informazioni, consulta Endpoint e quote di AWS IoT Core nella Documentazione generale di riferimento di AWS .

Scadenza del messaggio

È possibile aggiungere valori di scadenza del messaggio ai messaggi pubblicati. Questi valori rappresentano l'intervallo di scadenza del messaggio in secondi. Se i messaggi non sono stati inviati ai sottoscrittori entro tale intervallo, il messaggio scadrà e verrà rimosso. Se non si imposta il valore di scadenza del messaggio, il messaggio non scadrà.

In uscita, il sottoscrittore riceverà un messaggio con il tempo rimanente nell'intervallo di scadenza. Ad esempio, se per un messaggio di pubblicazione in entrata è impostata una scadenza del messaggio di 30 secondi e il messaggio viene instradato al sottoscrittore dopo 20 secondi, il campo di scadenza del messaggio verrà aggiornato a 10. È possibile che il messaggio ricevuto dal sottoscrittore abbia un MEI aggiornato pari a 0. Questo perché non appena il tempo rimanente è pari o inferiore a 999 ms, verrà aggiornato a 0.

In AWS IoT Core, l'intervallo minimo di scadenza dei messaggi è 1. Se l'intervallo è impostato su 0 dal lato client, verrà modificato su 1. L'intervallo massimo di scadenza del messaggio è 604800 (7 giorni). Qualsiasi valore superiore a questo verrà modificato nel valore massimo.

Nella comunicazione tra versioni, il comportamento della scadenza del messaggio viene deciso dalla versione MQTT del messaggio di pubblicazione in entrata. Ad esempio, un messaggio con scadenza inviato da una sessione connessa tramite MQTT5 può scadere per i dispositivi che hanno effettuato la sottoscrizione con sessioni MQTT3. Nella tabella seguente viene elencato in che modo la scadenza del messaggio supporta i seguenti tipi di messaggi di pubblicazione:

Tipo di messaggio di pubblicazione Message Expiry Interval
Pubblicazione regolare Se un server non riesce a recapitare il messaggio entro il tempo specificato, il messaggio scaduto verrà rimosso e non verrà ricevuto dal sottoscrittore. Ciò include situazioni come quando un dispositivo non effettua il back-up dei messaggi QoS 1.
Mantenimento Se un messaggio conservato scade e un nuovo client effettua la sottoscrizione all'argomento, il client non riceverà il messaggio al momento della sottoscrizione.
Conclusivo L'intervallo per i messaggi conclusivi inizia dopo che il client si disconnette e il server tenta di distribuire il messaggio conclusivo ai suoi sottoscrittori.
Messaggi in coda Se un messaggio QoS1 in uscita con l'intervallo di scadenza del messaggio scade quando un client è offline, dopo il ripristino della sessione persistente, il client non riceverà il messaggio scaduto.

Altre caratteristiche MQTT 5

Disconnessione server

Quando si verifica una disconnessione, il server può inviare in modo proattivo al client un messaggio DISCONNECT per segnalare la chiusura della connessione con un codice motivo della disconnessione.

Richiesta/Risposta

Gli autori possono richiedere che il destinatario invii una risposta a un argomento specificato dall'autore al momento della ricezione.

Dimensione massima del pacchetto

Client e server possono specificare in modo indipendente la dimensione massima dei pacchetti supportati.

Formato payload e tipo di contenuto

È possibile specificare il formato payload (binario, testo) e il tipo di contenuto quando viene pubblicato un messaggio. Questi dati vengono inoltrati al destinatario del messaggio.

Proprietà MQTT 5

Le proprietà MQTT 5 sono aggiunte importanti allo standard MQTT per supportare nuove caratteristiche MQTT 5 come Scadenza sessione e il modello Richiesta/Risposta. In AWS IoT Core, è possibile creare regole in grado di inoltrare le proprietà nei messaggi in uscita oppure utilizzare HTTP Publish per pubblicare messaggi MQTT con alcune delle nuove proprietà.

Nella tabella seguente sono elencate tutte le proprietà MQTT 5 supportate. AWS IoT Core

Proprietà Descrizione Input type (Tipo input) Pacchetto
Payload Format Indicator Un valore booleano che indica se il payload è formattato come UTF-8. Byte PUBLISH, CONNECT
Content Type Una stringa UTF-8 che descrive il contenuto del payload. Stringa UTF-8 PUBLISH, CONNECT
Response Topic Una stringa UTF-8 che descrive l'argomento su cui il destinatario deve pubblicare come parte del flusso di richiesta-risposta. L'argomento non deve contenere caratteri jolly. Stringa UTF-8 PUBLISH, CONNECT
Correlation Data Dati binari utilizzati dal mittente del messaggio di richiesta per identificare a quale richiesta è destinato il messaggio di risposta. Binario PUBLISH, CONNECT
User Property Una coppia di stringhe UTF-8. Questa proprietà può essere visualizzata più volte in un pacchetto. I destinatari riceveranno le coppie chiave-valore nello stesso ordine in cui vengono inviate. Una coppia di stringhe UTF-8 CONNECT, PUBLISH, Will Properties, SUBSCRIBE, DISCONNECT, UNSUBSCRIBE
Message Expiry Interval Un numero intero a 4 byte che rappresenta l'intervallo di scadenza del messaggio in secondi. Se assente, il messaggio non scade. Numero intero a 4 byte PUBLISH, CONNECT
Session Expiry Interval

Un numero intero a 4 byte che rappresenta l'intervallo di scadenza della sessione in secondi. AWS IoT Core supporta un massimo di 7 giorni, con un massimo predefinito di un'ora. Se il valore impostato supera il valore massimo del tuo account, AWS IoT Core restituirà il valore corretto nel CONNACK.

Numero intero a 4 byte CONNECT, CONNACK, DISCONNECT
Assigned Client Identifier Un ID client casuale generato da AWS IoT Core quando un ID client non è specificato dai dispositivi. L'ID cliente casuale deve essere un nuovo identificatore del cliente che non viene utilizzato da nessun'altra sessione attualmente gestita dal broker. Stringa UTF-8 CONNACK
Server Keep Alive Un numero intero a 2 byte che rappresenta il tempo keep alive assegnato dal server. Il server eseguirà la disconnessione del client se il client è inattivo per un periodo superiore al tempo keep alive. Numero intero a 2 byte CONNACK
Request Problem Information Un valore booleano che indica se la stringa motivo o le proprietà utente vengono inviate in caso di errori. Byte CONNECT
Receive Maximum Un numero intero a 2 byte che rappresenta il numero massimo di pacchetti PUBLISH QOS > 0 che possono essere inviati senza ricevere un PUBACK. Numero intero a 2 byte CONNECT, CONNACK
Topic Alias Maximum Questo valore indica il valore massimo che verrà accettato come un alias argomento. Il valore predefinito è 0. Numero intero a 2 byte CONNECT, CONNACK
Maximum QoS Il valore massimo di QoS supportato. AWS IoT Core Il valore predefinito è 1. AWS IoT Core non supporta QoS2. Byte CONNACK
Retain Available

Un valore booleano che indica se il broker di messaggi supporta i AWS IoT Core messaggi conservati. Il valore di default è 1.

Byte CONNACK
Maximum Packet Size La dimensione massima del pacchetto che AWS IoT Core accetta e invia. Non può essere maggiore di 128 KB. Numero intero a 4 byte CONNECT, CONNACK
Wildcard Subscription Available

Un valore booleano che indica se il broker di AWS IoT Core messaggi supporta Wildcard Subscription Available. Il valore di default è 1.

Byte CONNACK
Subscription Identifier Available

Un valore booleano che indica se il broker di AWS IoT Core messaggi supporta Subscription Identifier Available. Il valore predefinito è 0.

Byte CONNACK

Codici motivo MQTT

MQTT 5 introduce una migliore segnalazione degli errori con risposte al codice motivo. AWS IoT Core può restituire codici di motivo inclusi, a titolo esemplificativo ma non esaustivo, i seguenti raggruppati per pacchetti. Per un elenco completo dei codici motivo supportati da MQTT 5, consulta Specifiche MQTT v5.

Codici motivo CONNACK
Valore Hex Nome del codice motivo Descrizione
0 0x00 Riuscito La connessione è accettata.
128 0x80 Unspecified error (Errore non specificato) Il server non desidera rivelare il motivo dell'errore o nessuno degli altri codici motivo è valido.
133 0x85 Client Identifier not valid (Identificatore client non valido) L'identificatore client è una stringa valida ma non è consentito dal server.
134 0x86 Bad User Name or Password (Nome utente o password errati) Il server non accetta il nome utente o la password specificati dal client.
135 0x87 Not authorized (Non autorizzato) Il client non è autorizzato a connettersi.
144 0x90 Topic Name invalid (Nome argomento non valido) Il formato del nome argomento conclusivo è corretto ma non è accettato dal server.
151 0x97 Quota superata È stato superato un limite imposto di implementazione o amministrativo.
155 0x9B QoS not supported (QoS non supportato) Il server non supporta il QoS impostato in Will QoS.
Codici motivo PUBACK
Valore Hex Nome del codice motivo Descrizione
0 0x00 Riuscito Il messaggio è accettato. La pubblicazione del messaggio QoS 1 avanza.
128 0x80 Unspecified error (Errore non specificato) Il ricevitore non accetta la pubblicazione, ma non vuole rivelare il motivo o questo non corrisponde a uno degli altri valori.
135 0x87 Not authorized (Non autorizzato) Il PUBLISH non è autorizzato.
144 0x90 Topic Name invalid (Nome argomento non valido) Il nome dell'argomento non è malformato, ma non è accettato dal client o dal server.
145 0x91 Packet identifier in use (Identificatore pacchetto in uso) L'identificatore pacchetto è già in uso. Ciò potrebbe indicare una mancata corrispondenza nello stato della sessione tra il client e il server.
151 0x97 Quota superata È stato superato un limite imposto di implementazione o amministrativo.
Codici motivo DISCONNECT
Valore Hex Nome del codice motivo Descrizione
129 0x81 Malformed Packet (Pacchetto non conforme) Il pacchetto ricevuto non è conforme a questa specifica.
130 0x82 Protocol Error (Errore di protocollo) È stato ricevuto un pacchetto imprevisto o non in ordine.
135 0x87 Not authorized (Non autorizzato) La richiesta non è autorizzata.
139 0x8B Server shutting down (Arresto del server) Il server è in fase di arresto.
141 0x8D Keep Alive timeout (Timeout Keep Alive) La connessione è stata chiusa perché non è stato ricevuto alcun pacchetto per 1,5 volte il tempo Keep Alive.
142 0x8E Session taken over (Sessione acquisita) Un'altra connessione che utilizza lo stesso ClientID è stata connessa, causando la chiusura di questa connessione.
143 0x8F Topic Filter invalid (Filtro argomenti non valido) Il formato del filtro argomenti è corretto ma non è accettato dal server.
144 0x90 Topic Name invalid (Nome argomento non valido) Il formato del nome argomento è corretto ma non è accettato da questo client o dal server.
147 0x93 Receive Maximum exceeded (Ricezione massima superata) Il client o il server hanno ricevuto più della pubblicazione Receive Maximum (Ricezione massima) per la quale non hanno inviato PUBACK o PUBCOMP.
148 0x94 Topic Alias invalid (Alias argomento non valido) Il client o il server hanno ricevuto un pacchetto PUBLISH contenente un alias argomento maggiore dell'alias argomento massimo che ha inviato nel pacchetto CONNECT o CONNACK.
151 0x97 Quota superata È stato superato un limite imposto di implementazione o amministrativo.
152 0x98 Administrative action (Operazione amministrativa) La connessione viene chiusa a causa di un'operazione amministrativa.
155 0x9B QoS not supported (QoS non supportato) Il client ha specificato un QoS maggiore del QoS specificato in un QoS massimo in CONNACK.
161 0xA1 Subscription Identifiers not supported (Identificatori sottoscrizione non supportati) Il server non supporta gli identificatori sottoscrizione; la sottoscrizione non è accettata.
Codici motivo SUBACK
Valore Hex Nome del codice motivo Descrizione
0 0x00 Granted QoS 0 (QoS concesso 0) La sottoscrizione è accettata e il QoS massimo inviato sarà QoS 0. Potrebbe essere un QoS inferiore a quello richiesto.
1 0x01 Granted QoS 1 (QoS concesso 1) La sottoscrizione è accettata e il QoS massimo inviato sarà QoS 1. Potrebbe essere un QoS inferiore a quello richiesto.
128 0x80 Unspecified error (Errore non specificato) La sottoscrizione non è accettata e il server non desidera rivelare il motivo o nessuno degli altri codici motivo è valido.
135 0x87 Not authorized (Non autorizzato) Il client non è autorizzato a effettuare questa sottoscrizione.
143 0x8F Topic Filter invalid (Filtro argomenti non valido) Il formato del filtro argomenti è corretto ma non è consentito per questo client.
145 0x91 Packet Identifier in use (Identificatore pacchetto in uso) L'identificatore pacchetto specificato è già in uso.
151 0x97 Quota superata È stato superato un limite imposto di implementazione o amministrativo.
Codici motivo UNSUBACK
Valore Hex Nome del codice motivo Descrizione
0 0x00 Riuscito La sottoscrizione viene eliminata.
128 0x80 Unspecified error (Errore non specificato) L'annullamento della sottoscrizione non può essere completata e il server non desidera rivelare il motivo o nessuno degli altri codici motivo è valido.
143 0x8F Topic Filter invalid (Filtro argomenti non valido) Il formato del filtro argomenti è corretto ma non è consentito per questo client.
145 0x91 Packet Identifier in use (Identificatore pacchetto in uso) L'identificatore pacchetto specificato è già in uso.

AWS IoT differenze rispetto alle specifiche MQTT

L'implementazione del broker di messaggi è basata sulla specifica MQTT v3.1.1 e la specifica MQTT v5.0 ma è diversa dalle specifiche per quanto riguarda le considerazioni seguenti:

  • AWS IoT non supporta i seguenti pacchetti per MQTT 3: PUBREC, PUBREL e PUBCOMP.

  • AWS IoT non supporta i seguenti pacchetti per MQTT 5: PUBREC, PUBREL, PUBCOMP e AUTH.

  • AWS IoT non supporta il reindirizzamento del server MQTT 5.

  • AWS IoT supporta solo i livelli di qualità del servizio (QoS) MQTT 0 e 1. AWS IoT non supporta la pubblicazione o l'abbonamento con QoS di livello 2. Il broker di messaggi non invia un messaggio PUBACK o SUBACK quando è richiesto un livello QoS 2.

  • In AWS IoT, la sottoscrizione a un argomento con livello QoS 0 significa che un messaggio viene recapitato zero o più volte. È possibile che un messaggio venga recapitato più di una volta. I messaggi recapitati più di una volta potrebbero essere inviati con un ID pacchetto diverso. In questi casi, il flag DUP non è impostato.

  • Nel rispondere a una richiesta di connessione, il broker di messaggi invia un messaggio CONNACK. Questo messaggio contiene un flag per indicare se la connessione sta riprendendo una sessione precedente.

  • Prima di inviare pacchetti di controllo aggiuntivi o una richiesta di disconnessione, il client deve attendere che broker di messaggi di AWS IoT riceva il messaggio CONNACK.

  • Quando un client sottoscrive un argomento, può verificarsi un ritardo tra il momento in cui il broker di messaggi invia un messaggio SUBACK e il momento in cui il client inizia a ricevere nuovi messaggi corrispondenti.

  • Quando un client utilizza il carattere jolly # nel filtro argomento per sottoscrivere un argomento, tutte le stringhe al livello e al di sotto del livello nella gerarchia degli argomenti vengono abbinate. Tuttavia, l'argomento principale non è corrispondente. Ad esempio, una sottoscrizione all'argomento sensor/# riceve messaggi pubblicati sugli argomenti sensor/, sensor/temperature, sensor/temperature/room1, ma non messaggi pubblicati su sensor. Per ulteriori informazioni sull'utilizzo di caratteri jolly, vedi Filtri argomento.

  • Il broker di messaggi usa l'ID client per identificare ogni client. L'ID client viene passato dal client al broker di messaggi come parte del payload MQTT. Due client con lo stesso ID client non possono essere connessi contemporaneamente al broker di messaggi. Quando un client si connette al broker di messaggi tramite un ID client usato da un altro client, viene accettata la connessione del nuovo client e il client connesso in precedenza viene disconnesso.

  • In rari casi, il broker di messaggi può inviare di nuovo lo stesso messaggio PUBLISH logico con un ID pacchetto diverso.

  • La sottoscrizione ai filtri degli argomenti che contengono un carattere jolly non può ricevere messaggi conservati. Per ricevere un messaggio conservato, la richiesta di sottoscrizione deve contenere un filtro argomento che corrisponda esattamente all'argomento del messaggio conservato.

  • Il broker di messaggi non garantisce l'ordine di ricezione dei messaggi e delle conferme.

  • AWS IoT possono avere limiti diversi dalle specifiche. Per ulteriori informazioni, consulta quote e limiti del broker di messaggistica e del protocollo AWS IoT Core nella Guida di riferimento di AWS IoT .

  • Il flag MQTT DUP non è supportato.