Mit der SUBSCRIBE-Nachricht kann ein Client einen Interessenten für einen oder mehrere Themennamen beim Broker registrieren. Nachrichten, die zu diesen Themen veröffentlicht wurden, stellt der Broker vom Client als PUBLISH-Nachrichten zu. Die SUBSCRIBE-Nachricht gibt zudem die QoS-Stufe an, in der der Subskribent veröffentlichte Nachrichten empfangen möchte.
Die nachfolgende Tabelle zeigt das Format des festen Headers.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Byte 1 | Nachrichtenart (8) | DUP-Argument | QoS-Stufe | RETAIN | ||||
1 | 0 | 0 | 0 | 0 | 0 | 1 | x | |
Byte 2 | Verbleibende Länge |
Der variable Header enthält eine Nachrichten-ID, da eine SUBSCRIBE-Nachricht die QoS-Stufe 1 hat.
Für gewöhnlich generiert die Protokollbibliothek die Nachrichten-ID und gibt sie an die veröffentlichende Anwendung zurück, beispielsweise als Rückgabe-Handle. Auf diese Weise wird vermieden, dass mehrere Anwendungen oder Veröffentlichungs-Threads auf einem einzelnen Client ausgeführt werden und doppelte Nachrichten-IDs generieren.
Die Nachrichten-ID 0 (0x0000) ist als ungültige Nachrichten-ID reserviert und darf nicht verwendet werden. Die Nachrichten-ID ist eine ganze 16-Bit-Zahl ohne Vorzeichen, die sich üblicherweise mit jeder Nachricht genau um den Wert von 1 erhöht. Dies ist jedoch nicht zwingend erforderlich. Die beiden Bytes der Nachrichten-ID werden in der MSB, gefolgt von LSB (Big Endian), sortiert.
Die nachfolgende Tabelle zeigt ein Beispielformat des variablen Headers mit der Nachrichten-ID 10.
Beschreibung: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nachrichten-ID | |||||||||
Byte 1 | Nachrichten-ID MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Byte 2 | Nachrichten-ID LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
Die Nutzlast einer SUBSCRIBE-Nachricht enthält eine Liste der vom Client abonnierten Themennamen und die QoS-Stufe, mit der der Client die Nachrichten empfangen möchte. Die Zeichenfolgen sind UTF-verschlüsselt, und die QoS-Stufe belegt 2 Bit eines Einzelbytes. Diese Abschnitt/QoS-Paare werden zusammenhängend gepackt, wie im Nutzlast-Beispiel in der nachfolgenden Tabelle gezeigt.
Themenname | "a/b" |
Angeforderte QoS-Stufe | 1 |
Themenname | "c/d" |
Angeforderte QoS-Stufe | 2 |
Themennamen in einer SUBSCRIBE-Nachricht werden nicht komprimiert.
Die nachfolgende Tabelle zeigt das Format der Beispiel-Nutzlast.
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 |
Angeforderte QoS-Stufe | |||||||||
Byte 6 | Angeforderte QoS-Stufe (1) | x | x | x | x | x | x | 0 | 1 |
Themenname | |||||||||
Byte 7 | Länge MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Byte 8 | Länge LSB (3) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Byte 9 | 'c' (0x63) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 |
Byte 10 | '/' (0x2F) | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
Byte 11 | 'd' (0x64) | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
Angeforderte QoS-Stufe | |||||||||
Byte 12 | Angeforderte QoS-Stufe (2) | x | x | x | x | x | x | 1 | 0 |
In der Annahme, dass die angeforderte QoS-Stufe erteilt ist, empfängt der Client PUBLISH-Nachrichten auf dieser Stufe oder darunter, je nach QoS-Stufe der ursprünglichen Nachricht des Publishers. Beispiel: Wenn ein Client ein bestimmtes Thema mit QoS-Stufe 1 abonniert hat, wird eine PUBLISH-Nachricht mit QoS-Stufe 0 an den Client auf QoS-Stufe 0 gesendet. Eine PUBLISH-Nachricht mit QoS-Stufe 2 an dasselbe Thema wird heruntergesetzt auf QoS-Stufe 1 zur Zustellung an den Client.
Als Folge ist das Abonnieren eines Themas mit QoS-Stufe 2 gleichbedeutend mit der Aussage "Ich möchte Nachrichten zu diesem Thema auf der QoS-Stufe erhalten, auf der sie veröffentlicht werden".
Das Feld mit der angeforderten QoS-Stufe ist in den Byte verschlüsselt, die auf jeden UTF-verschlüsselten Themennamen folgen (siehe nachfolgende Tabelle).
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Reserviert | Reserviert | Reserviert | Reserviert | Reserviert | Reserviert | QoS-Stufe | ||
x | x | x | x | x | x |
Die ersten 6 Bit dieses Bytes werden in der aktuellen Protokollversion nicht verwendet. Sie sind zur zukünftigen Nutzung reserviert.