Un messaggio PUBLISH è inviato da un client ad un broker per la distribuzione ai sottoscrittori interessati. Ogni messaggio PUBLISH è associato ad un nome di argomento (noto anche come Soggetto o Canale). Questo è uno spazio dei nomi gerarchico che definisce una tassonomia di origini informazioni per cui i sottoscrittori possono manifestare un interesse. Un messaggio che è pubblicato in un nome di argomento specifico è consegnato ai sottoscrittori connessi per tale argomento.
Per mantenere la simmetria, se un client effettua la sottoscrizione ad uno o più argomenti, tutti i messaggi pubblicati in quegli argomenti vengono inviati dal broker al client come messaggio PUBLISH.
La seguente tabella mostra il formato dell'intestazione fissa.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo messaggio (3) | Indicatore DUP | Livello QoS | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
byte 2 | Lunghezza rimanente |
Per i messaggi con QoS livello 1 o livello 2 che sono inviati di nuovo poiché è stato rilevato un errore, il bit DUP è impostato su 1. Questo indica al broker che il messaggio potrebbe essere il duplicato di un messaggio che è già stato ricevuto. Il significato di queste informazioni per il broker dipende dal livello QoS. Il bit DUP non è utilizzato per messaggi con QoS livello 0.
L'intestazione variabile contiene i seguenti campi:
In genere, è la libreria del protocollo che genera l'ID messaggio e lo ritrasmette all'applicazione di pubblicazione, possibilmente come handle di ritorno. Tale approccio elimina il rischio che più applicazioni o thread di pubblicazione, in esecuzione su un singolo client generino ID messaggio duplicati.
Non è possibile utilizzare l'ID messaggio nell'intestazione variabile per i messaggi con QoS livello 0.
L'ID messaggio è un numero intero senza segno a 16-bit, che in genere aumenta esattamente di uno da un messaggio all'altro, ma non obbligatoriamente. L'ordine dei 2 byte dell'identificativo del messaggio è MSB, poi LSB (big-endian).
L'ID messaggio 0 (cioè, 0x0000) è riservato come ID messaggio non valido e non può essere utilizzato.
La seguente tabella mostra un esempio di intestazione variabile per un messaggio PUBLISH.
Campo | Valore |
---|---|
Nome argomento: | "a/b" |
Livello QoS | 1 |
ID messaggio: | 10 |
Il formato dell'intestazione variabile in questo caso è mostrato nella tabella seguente.
Descrizione | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nome argomento | |||||||||
byte 1 | MSB della lunghezza (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 2 | LSB della lunghezza (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
byte 3 | 'a' (0x61) | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
byte 4 | '/' (0x2F) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
byte 5 | 'b' (0x62) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
Identificativo del messaggio | |||||||||
byte 6 | MSB ID messaggio (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 7 | LSB ID messaggio (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
Contiene i dati per la pubblicazione. Il contenuto e il formato dei dati è specifico per l'applicazione. Il campo Lunghezza rimanente nell'intestazione fissa include sia la lunghezza dell'intestazione variabile sia la lunghezza del payload.
La risposta ad un messaggio PUBLISH dipende dal livello QoS. La seguente tabella mostra le risposte previste.
Livello QoS | Risposta prevista |
---|---|
QoS 0 | Nessuna azione. |
QoS 1 | PUBACK |
QoS 2 | PUBREC |
I messaggi PUBLISH possono esser inviati da un autore (publisher) al broker o dal broker ad un sottoscrittore. L'azione del destinatario, quando riceve un messaggio, dipende dal livello QoS del messaggio:
Se il broker riceve il messaggio, per parti interessate si intendono i sottoscrittori all'argomento del messaggio PUBLISH. Se un sottoscrittore riceve il messaggio, per parti interessate si intende l'applicazione sul client che ha effettuato la sottoscrizione ad uno o più argomenti e che è in attesa di un messaggio dal broker.