Eine PUBLISH-Nachricht wird vom Client zur Verteilung an interessierte Subskribenten an den Broker gesendet. Jede PUBLISH-Nachricht ist einem Themennamen zugeordnet (auch als Betreff oder Kanal bezeichnet). Es handelt sich hierbei um einen hierarchischen Namespace, der die Taxonomie von Informationsquellen definiert, für die sich interessierte Subskribenten registrieren lassen können. Eine Nachricht, die zu einem bestimmten Themennamen veröffentlicht wurde, wird an verbundene Subskribenten dieses Themas gesendet.
Um die Symmetrie zu wahren, wenn ein Client ein oder mehrere Themen abonniert, werden alle Nachrichten, die für diese Themen veröffentlicht werden, vom Broker als PUBLISH-Nachricht an den Client gesendet.
Die nachfolgende Tabelle zeigt das Format des festen Headers.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Byte 1 | Nachrichtenart (3) | DUP-Argument | QoS-Stufe | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
Byte 2 | Verbleibende Länge |
Bei Nachrichten mit QoS-Stufe 1 oder 2, die erneut gesendet werden, da ein Fehler aufgetreten ist, wird das DUP-Bit auf 1 gesetzt. Dies zeigt dem Broker an, dass es bei der Nachricht möglicherweise um das Duplikat einer bereits empfangenen Nachricht handelt. Die Bedeutung dieser Informationen für den Broker richtet sich nach der QoS-Stufe. Das DUP-Bit wird für Nachrichten mit QoS-Stufe 0 nicht gesetzt.
Der variable Header enthält folgende Felder:
Für gewöhnlich ist die Protokollbibliothek für die Generierung der Nachrichten-ID und ihre Rückübermittlung an die veröffentlichende Anwendung, wenn möglich als Rückgabe-Handle, verantwortlich. Auf diese Weise wird das Risiko vermieden, dass mehrere Anwendungen oder Veröffentlichungs-Threads auf einem einzelnen Client ausgeführt und doppelte Nachrichten-IDs generiert werden.
Eine Nachrichten-ID darf nicht im variablen Header von Nachrichten mit QoS-Stufe 0 verwendet werden.
Die Nachrichten-ID ist eine ganze 16-Bit-Zahl ohne Vorzeichen, die sich mit jeder Nachricht üblicherweise genau um den Wert von 1 erhöht. Dies ist jedoch nicht zwingend erforderlich. Die 2 Bytes der Nachrichten-ID werden in der Reihenfolge MSB, dann LSB (Big Endian) sortiert.
Die Nachrichten-ID 0 (d. h. 0x0000) ist als ungültige Nachrichten-ID reserviert und darf nicht verwendet werden.
Die nachfolgende Tabelle zeigt ein Beispiel zu einem variablen Header für eine PUBLISH-Nachricht.
Feld | Wert |
---|---|
Themenname: | "a/b" |
QoS-Stufe | 1 |
Nachrichten-ID: | 10 |
Die nachfolgende Tabelle zeigt das Format des variablen Headers für diesen Fall.
Beschreibung: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Themenname | |||||||||
Byte 1 | Länge MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Byte 2 | Länge LSB (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 |
Nachrichten-ID | |||||||||
Byte 6 | Nachrichten-ID MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Byte 7 | Nachrichten-ID LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
Enthält die zu veröffentlichenden Daten. Inhalt und Format der Daten richten sich nach der jeweiligen Anwendung. Das Feld "Verbleibende Länge" im festen Header enthält die Länge des variablen Headers sowie die Länge der Nutzlast.
Die Antwort auf eine PUBLISH-Nachricht hängt von der QoS-Stufe ab. Die nachfolgende Tabelle zeigt die erwarteten Antworten.
QoS-Stufe | Erwartete Antwort |
---|---|
QoS 0 | Keine |
QoS 1 | PUBACK |
QoS 2 | PUBREC |
PUBLISH-Nachrichten können entweder von einem Subskribenten an den Broker oder vom Broker an den Subskribenten gesendet werden. Die Aktion des Empfängers beim Erhalt der Nachricht richtet sich nach der QoS-Stufe der Nachricht:
Wenn der Broker die Nachricht empfängt, bedeutet "Interessenten" Subskribenten des Themas der PUBLISH-Nachricht. Wenn ein Subskribent die Nachricht empfängt, bedeutet "Interessenten" die Anwendung auf dem Client, der ein oder mehrere Themen abonniert hat und auf Nachricht vom Broker wartet.