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
AWS IoT Core supporta connessioni di dispositivi che utilizzano il MQTT protocollo e MQTT tramite WSS protocollo e che sono identificate da un ID client. AWS IoT Dispositivo SDKs supportano entrambi i protocolli e sono i modi consigliati per connettere i dispositivi a AWS IoT Core. Il AWS IoT dispositivo SDKs supporta le funzioni necessarie ai dispositivi e ai client per connettersi e accedere ai AWS IoT servizi. Il dispositivo SDKs supporta i protocolli di autenticazione richiesti AWS IoT dai servizi e i requisiti di ID di connessione richiesti dal MQTT protocollo e MQTT dai WSS protocolli aggiuntivi. Per informazioni su come connettersi AWS IoT utilizzando il AWS dispositivo SDKs e collegamenti ad esempi AWS IoT nelle lingue supportate, vedereConnessione MQTT tramite l'utilizzo del dispositivo AWS IoT SDKs. Per ulteriori informazioni sui metodi di autenticazione e sulle mappature delle porte per i MQTT messaggi, vedere. Protocolli, mappature delle porte e autenticazione
Sebbene consigliamo di utilizzare il AWS IoT dispositivo SDKs a cui connettersi AWS IoT, non sono necessari. Se non si utilizza il AWS IoT DispositivoSDKs, tuttavia, è necessario fornire la necessaria sicurezza di connessione e comunicazione. I client devono inviare l'TLSestensione Server Name Indication (SNI)
In questo argomento:
- Connessione MQTT tramite l'utilizzo del dispositivo AWS IoT SDKs
- MQTTOpzioni di qualità del servizio (QoS)
- MQTTsessioni persistenti
- MQTTmessaggi conservati
- MQTTMessaggi di Last Will and Testament (LWT)
- Usando connectAttributes
- MQTT5 funzionalità supportate
- MQTT5 proprietà
- MQTTcodici di motivo
- AWS IoT differenze rispetto alle MQTT specifiche
Connessione MQTT tramite l'utilizzo del dispositivo AWS IoT SDKs
Questa sezione contiene collegamenti al AWS IoT dispositivo SDKs 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 MQTT protocollo e MQTT oltreWSS.
Nota
The AWS IoT Device SDKs ha rilasciato un client MQTT 5.
MQTTOpzioni di qualità del servizio (QoS)
AWS IoT e il AWS IoT dispositivo SDKs supporta i livelli 0
di MQTT qualità del servizio (QoS)1
Il MQTT protocollo definisce un terzo livello di QoS, livello2
, ma AWS IoT non lo supporta. Solo il MQTT protocollo supporta la funzionalità QoS. HTTPSsupporta QoS passando un parametro di stringa di query ?qos=qos
in cui 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 |
Il messaggio non viene considerato completo fino a quando il mittente non riceve una risposta |
MQTTsessioni persistenti
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 CloudWatch and CloudWatch Logs. 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 MQTT 3, si crea una sessione MQTT persistente inviando un CONNECT
messaggio e impostando il cleanSession
flag su0
. 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, gestisci le sessioni persistenti impostando il Clean Start
flag eSession 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 CONNECT messaggio, il valore predefinito è 0.
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 imposti Clean Start
= 1
e Session
Expiry Interval
=0
, questo è l'equivalente di MQTT 3 sessioni pulite. Se imposti Clean Start
= 0
e Session Expiry Interval
>0
, questo è l'equivalente di MQTT 3 sessioni persistenti.
Nota
Le sessioni persistenti in MQTT versione incrociata (MQTT3 e MQTT 5) non sono supportate. Una sessione persistente di MQTT 3 sessioni non può essere ripresa come sessione a 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 client e un broker di MQTT messaggi. 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. Nella versione MQTT 5, se un QoS1 in uscita con Intervallo di scadenza dei messaggi scade quando un client è offline, dopo la ripresa della connessione, 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 flagcleanSession
su1
.
In MQTT 3, il valore predefinito del tempo di scadenza delle sessioni persistenti è un'ora e questo vale per tutte le sessioni dell'account.
In MQTT 5, è possibile impostare l'intervallo di scadenza delle sessioni per ogni sessione su CONNECT e DISCONNECT pacchetti.
Per l'intervallo di scadenza della sessione sul pacchetto: DISCONNECT
-
Se la sessione corrente ha un intervallo di scadenza della sessione pari a 0, non è possibile impostare l'intervallo di scadenza della sessione su un valore superiore a 0 sul pacchetto. DISCONNECT
-
Se la sessione corrente ha un intervallo di scadenza della sessione superiore a 0 e l'intervallo di scadenza della sessione viene impostato su 0 sul pacchetto, la sessione verrà terminata ilDISCONNECT. DISCONNECT
-
In caso contrario, l'intervallo di scadenza della sessione sul DISCONNECT pacchetto 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
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 client 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.
MQTTmessaggi conservati
AWS IoT Core supporta il RETAIN flag descritto nel MQTT protocollo. Quando un client imposta il RETAIN flag su un MQTT messaggio 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 dei messaggi MQTT conservati
-
Come messaggio di configurazione iniziale
MQTTi messaggi conservati vengono inviati a un client dopo che il client si è abbonato a un argomento. Se desideri che tutti i client che sottoscrivono un argomento ricevano il messaggio MQTT mantenuto subito dopo la sottoscrizione, puoi pubblicare un messaggio di configurazione con il RETAIN flag 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 RETAIN flag sui messaggi con lo stato attuale in modo AWS IoT Core da salvarli. 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 selezionato. In questo modo possono evitare di dover attendere il prossimo messaggio dal dispositivo per vedere lo stato corrente.
In questa sezione:
Attività comuni con messaggi conservati in MQTT AWS IoT Core
AWS IoT Core salva MQTT i messaggi con il RETAIN flag impostato. Questi messaggi conservati vengono inviati a tutti i client che hanno sottoscritto l'argomento, come un MQTT messaggio normale, e vengono inoltre archiviati per essere inviati ai nuovi abbonati all'argomento.
MQTTI messaggi conservati richiedono azioni politiche 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 mantenuto quando pubblica un messaggio. MQTT I client possono impostare il RETAIN contrassegno quando pubblicano un messaggio utilizzando un dispositivo. SDK Le applicazioni e i servizi possono impostare il RETAIN contrassegno quando utilizzano l'
Publish
azione per pubblicare un MQTT messaggio.Viene conservato un solo messaggio per nome argomento. Un nuovo messaggio con il RETAIN contrassegno impostato pubblicato su un argomento sostituisce qualsiasi messaggio conservato esistente inviato in precedenza all'argomento.
NOTE: non è possibile pubblicare su un argomento riservato con il RETAIN flag impostato.
-
Iscrizione di un argomento del messaggio conservato
I clienti sottoscrivono gli argomenti dei messaggi mantenuti come qualsiasi altro argomento dei MQTT messaggi. Il flag è impostato per i messaggi conservati ricevuti mediante sottoscrizione a un argomento del messaggio mantenuto. 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 conservato. 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.
NOTE: Per ricevere un messaggio conservato al momento della sottoscrizione, il filtro degli argomenti nella richiesta di iscrizione deve corrispondere esattamente all'argomento del messaggio salvato.
Per i messaggi conservati ricevuti al momento della sottoscrizione a un argomento del messaggio mantenuto è 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
eGetRetainedMessage
.A un client non viene impedito di pubblicare messaggi su un argomento del messaggio mantenuto senza impostare il contrassegno. RETAIN Ciò potrebbe causare risultati imprevisti, ad esempio il messaggio conservato che non corrisponde al messaggio ricevuto sottoscrivendo l'argomento.
Con MQTT 5, se per un messaggio conservato è impostato l'Intervallo di scadenza dei messaggi e il messaggio conservato scade, un nuovo sottoscrittore che si iscrive a quell'argomento non riceverà il messaggio conservato dopo l'avvenuta 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
MQTTI messaggi
creati quando un dispositivo si connette possono essere conservati impostando la bandiera nel campo. Will Retain
Connect Flag bits
-
Eliminazione di un messaggio conservato
I dispositivi, le applicazioni e i servizi possono eliminare un messaggio conservato pubblicando un messaggio con il RETAIN flag impostato e un payload di messaggi vuoto (0 byte) nel nome dell'argomento del messaggio conservato da eliminare. Tali messaggi eliminano il messaggio conservato AWS IoT Core, vengono inviati ai client abbonati 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 IoT inviano 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 MQTT client di test
La pagina del client di MQTT test nella AWS IoT console può sottoscrivere e pubblicare MQTT argomenti. L'opzione di pubblicazione ti consente di impostare il RETAIN contrassegno sui messaggi che pubblichi per simulare il comportamento dei tuoi dispositivi.
Alcuni risultati imprevisti 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 RETAIN set e payload superiori a 0 byte finché 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 RETAIN flag impostato da un client, utilizzando la AWS IoT
console o chiamando Publish
comporta costi di messaggistica aggiuntivi descritti in Prezzi - Messaggistica.AWS IoT Core
Il recupero dei messaggi conservati da un cliente, utilizzando la AWS IoT console o chiamando GetRetainedMessage
comporta costi di messaggistica oltre ai normali costi di utilizzo. API I costi aggiuntivi sono descritti nella sezione Prezzi di AWS IoT Core
- Messaggistica
MQTTAi messaggi pubblicati quando un dispositivo si disconnette inaspettatamente verranno
Per ulteriori informazioni sui prezzi dei messaggi, consulta la sezione Prezzi di AWS IoT Core - Messaggistica
Confronto tra messaggi conservati e sessioni MQTT persistenti MQTT
I messaggi conservati e le sessioni persistenti sono funzionalità standard 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 a QOS = 1 e sottoscritti con a QOS =1 mentre il dispositivo era disconnesso vengono inviati dopo la riconnessione del dispositivo. |
Scadenza della sessione/dati |
Nella versione MQTT 3, i messaggi conservati non scadono. Sono archiviati fino a quando non vengono sostituiti o eliminati. Nella versione MQTT 5, i messaggi conservati scadono dopo l'intervallo di scadenza 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, le sottoscrizioni e i messaggi salvati del client pubblicati con a QOS = 1 e sottoscritti con un QOS =1 mentre il dispositivo era disconnesso vengono eliminati. I messaggi scaduti non verranno distribuiti. Per ulteriori informazioni sulle scadenze di sessione con sessioni persistenti, consulta MQTTsessioni persistenti. |
Per informazioni sulle sessioni persistenti, consulta MQTTsessioni persistenti.
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 RETAIN set e payload superiori a 0 byte finché alcuni messaggi conservati non vengono eliminati e il numero di messaggi conservati non scende al di sotto del limite.
MQTTmessaggi conservati e Device Shadows 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. MQTTnon specifica una struttura o uno schema per il payload dei messaggi. |
AWS IoT supporta una struttura di 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. |
MQTTMessaggi di Last Will and Testament (LWT)
Last Will and Testament (LWT) è una funzionalità di. MQTT ConLWT, i client 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 spontanea. Il messaggio specificato dai client si chiama LWT messaggio o messaggio di volontà e l'argomento definito dai client viene definito argomento di volontà. È possibile specificare un LWT messaggio 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 MQTT DISCONNECT messaggio, il broker non pubblicherà i messaggi memorizzati. LWT In tutti gli altri casi, i messaggi verranno inviati. LWT Per un elenco completo degli scenari di disconnessione in cui il broker invierà i LWT messaggi, consulta Eventi di connessione/disconnessione.
Usando connectAttributes
ConnectAttributes
consentono di specificare quali attributi si desidera utilizzare nel messaggio di connessione nelle IAM politiche, ad esempio PersistentConnect
eLastWill
. 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 nelLastWillTopic
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 persistente nella IAM politica se si desidera averne una.
Per esempi di ConnectAttributes
, consulta Esempi di policy di connessione.
MQTT5 funzionalità supportate
AWS IoT Core il supporto per MQTT 5 si basa sulla specifica MQTT v5.0
AWS IoT Core supporta le seguenti MQTT 5 funzionalità:
Sottoscrizioni condivise
AWS IoT Core supporta gli abbonamenti condivisi 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. Le sottoscrizioni condivise possono bilanciare efficacemente il carico MQTT dei messaggi tra diversi 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 unShareName
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. |
|
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. |
|
Flusso di sottoscrizioni non condivise | Flusso di sottoscrizioni condivise |
---|---|
|
|
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.
In questo esempio, ci sono tre sottoscrizioni condivise corrispondenti all'argomento di pubblicazione. MQTT
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 le sottoscrizioni condivise utilizzando il AWS IoT MQTT client nella AWS IoT console, consulta
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 MQTTsessioni persistenti.
Codice motivo su tutti ACKs
È 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 i codici dei MQTT motivi. Per un elenco completo dei codici MQTT motivo, vedere le specifiche della MQTT versione 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 dall'abbonato abbia un aggiornamento MEI pari a 0. Questo perché non appena il tempo rimanente è pari o inferiore a 999 ms, verrà aggiornato a 0.
Nel 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.
Nelle comunicazioni tra versioni, il comportamento della scadenza del messaggio viene deciso dalla MQTT versione del messaggio di pubblicazione in entrata. Ad esempio, un messaggio con scadenza inviato da una sessione connessa tramite MQTT5 può scadere per i dispositivi abbonati alle 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 5 funzionalità MQTT
Disconnessione server
Quando si verifica una disconnessione, il server può inviare in modo proattivo DISCONNECT al client un messaggio di notifica della 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.
MQTT5 proprietà
MQTTLe 5 proprietà sono importanti aggiunte allo MQTT standard per supportare nuove MQTT 5 funzionalità come Session Expiry e il pattern Request/Response. In AWS IoT Core, puoi creare regole in grado di inoltrare le proprietà nei messaggi in uscita o utilizzare HTTPPublish per pubblicare MQTT messaggi con alcune delle nuove proprietà.
Nella tabella seguente sono elencate tutte le MQTT 5 proprietà AWS IoT Core supportate.
Proprietà | Descrizione | Input type (Tipo input) | Pacchetto |
---|---|---|---|
Payload Format Indicator | Un valore booleano che indica se il payload è formattato come -8. UTF | Byte | PUBLISH, CONNECT |
Content Type | Una stringa UTF -8 che descrive il contenuto del payload. | UTF- Stringa -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. | UTF-8 stringhe | 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 UTF 8 corde. Questa proprietà può essere visualizzata più volte in un pacchetto. I destinatari riceveranno le coppie chiave-valore nello stesso ordine in cui vengono inviate. | UTF-8 coppie di corde | CONNECT,PUBLISH, Will PropertiesSUBSCRIBE,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 nelCONNACK. |
Numero intero a 4 byte | CONNECT, CONNACK, DISCONNECT |
Assigned Client Identifier | Un ID client casuale generato da AWS IoT Core quando un ID cliente 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. | UTF-8 stringhe | 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 |
Dimensione massima del pacchetto | 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 |
MQTTcodici di motivo
MQTT5 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 le specifiche di MQTT5
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. |
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) | Non PUBLISH è 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. |
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 ha ricevuto più della pubblicazione Receive Maximum per la quale non ha inviato PUBACK oPUBCOMP. |
148 | 0x94 | Topic Alias invalid (Alias argomento non valido) | Il client o il server ha ricevuto un PUBLISH pacchetto contenente un alias di argomento maggiore dell'alias dell'argomento massimo inviato nel CONNECT pacchetto or. 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. |
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. |
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 MQTT specifiche
L'implementazione del broker di messaggi si basa sulla specifica MQTTv3.1.1 e sulla specifica MQTT
-
AWS IoT non supporta i seguenti pacchetti per MQTT 3:, e. PUBREC PUBREL PUBCOMP
-
AWS IoT non supporta i seguenti pacchetti per MQTT 5:PUBREC, PUBRELPUBCOMP, e. AUTH
-
AWS IoT non supporta il reindirizzamento a MQTT 5 server.
-
AWS IoT supporta MQTT solo i livelli di qualità del servizio (QoS) 0 e 1. AWS IoT non supporta la pubblicazione o l'abbonamento con QoS di livello 2. Quando viene richiesto il livello QoS 2, il broker di messaggi non invia un PUBACK or. SUBACK
-
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, la DUP bandiera non è impostata.
-
Quando risponde a una richiesta di connessione, il broker di messaggi invia un CONNACK messaggio. 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 il CONNACK messaggio venga ricevuto sul proprio dispositivo dal AWS IoT broker di messaggi.
-
Quando un cliente si iscrive a un argomento, potrebbe verificarsi un ritardo tra il momento in cui il broker 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'argomentosensor/#
riceve messaggi pubblicati sugli argomentisensor/
,sensor/temperature
,sensor/temperature/room1
, ma non messaggi pubblicati susensor
. 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 MQTT payload. 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 rare occasioni, il broker di messaggi potrebbe inviare nuovamente lo stesso PUBLISH messaggio logico con un ID di 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 in cui i messaggi ACK vengono ricevuti.
-
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 .
-
La MQTT DUP bandiera non è supportata.