Fester WebSphere MQ Telemetry Transport-Header

Der Nachrichtenheader jeder WebSphere MQ Telemetry Transport-Befehlsnachricht enthält einen festen Header. Die nachfolgende Tabelle zeigt das Format des festen Headers.

Bit 7 6 5 4 3 2 1 0
Byte 1 Nachrichtenart DUP-Attribut QoS-Stufe RETAIN
Byte 2 Verbleibende Länge
Byte 1

Enthält die Felder für den Nachrichtentyp und Argumente (Dup, QoS-Stufe und RETAIN).

Byte 2

(Mindestens ein Byte) enthält das Feld für die verbleibende Länge.

In den nachfolgenden Abschnitten werden die Felder beschrieben. Alle Datenwerte sind in der Big Endian-Reihenfolge sortiert: High-Order-Bytes stehen vor Lower-Order-Bytes. Ein 16-Bit-Wort wird beim Senden als Most Significant Byte (MSB), gefolgt vom Least Significant Byte (LSB), dargestellt.

Nachrichtenart

Position: Byte 1, Bits 7-4.

Dargestellt als 4-Bit-Wert ohne Vorzeichen. Die Aufzählungen für diese Protokollversion sind in der nachfolgenden Tabelle enthalten.

Mnemonisch Aufzählung Beschreibung:
Reserviert 0 Reserviert
CONNECT 1 Clientanforderung zum Herstellen einer Verbindung zum Broker
CONNACK 2 Verbindungsbestätigung
PUBLISH 3 Nachricht veröffentlichen
PUBACK 4 Veröffentlichungsbestätigung
PUBREC 5 Veröffentlichung empfangen (gesicherte Zustellung Teil 1)
PUBREL 6 Freigabe veröffentlichen (gesicherte Zustellung Teil 2)
PUBCOMP 7 Veröffentlichungsabschluss (gesicherte Zustellung Teil 3)
SUBSCRIBE 8 Client-Subskriptionsanforderung
SUBACK 9 Subskriptionsbestätigung
UNSUBSCRIBE 10 Client-Abbestellungsanforderung
UNSUBACK 11 Abbestellungsbestätigung
PINGREQ 12 PING-Anforderung
PINGRESP 13 PING-Antwort
DISCONNECT 14 Client trennt die Verbindung
Reserviert 15 Reserviert

Argumente

Die verbleibenden Bits von Byte 1 enthalten die Felder DUP, QoS und RETAIN. Die Bitpositionen sind verschlüsselt, um die Argumente darzustellen (siehe nachfolgende Tabelle).

Bitposition Name Beschreibung:
3 DUP Doppelte Zustellung
2-1 QoS Servicequalität
0 RETAIN RETAIN-Argument
DUP

Position: Byte 1, Bit 3.

Dieses Argument wird festgelegt, wenn der Client oder Broker versucht, eine PUBLISH-Nachricht erneut zuzustellen. Dies gilt für Nachrichten, deren QoS-Wert größer ist als Null (0) und die eine Bestätigung erfordern. Wenn das DUP-Bit festgelegt ist, enthält der variable Header eine Nachrichten-ID.

QoS

Position: Byte 1, Bits 2-1.

Dieses Argument zeigt die Zusicherungsstufe für die Zustellung einer PUBLISH-Nachricht an. Die QoS-Stufen werden in der nachfolgenden Tabelle dargestellt.

QoS-Wert Bit 2 Bit 1 Beschreibung:
0 0 0 Höchstens einmal Einmalig starten <=1
1 0 1 Mindestens einmal Zustellung bestätigt >=1
2 1 0 Genau einmal Gesicherte Zustellung =1
3 1 1 Reserviert
RETAIN

Position: Byte 1, Bit 0.

Wenn das Retain-Argument festgelegt ist, zeigt es an, dass der Broker die Nachricht zurückbehält und sie als Startnachricht an neue Subskribenten dieses Themas sendet. Das bedeutet, dass ein neuer Client, der eine Verbindung zum Broker herstellt, die aktuelle Anzahl der Themen schnell erstellen kann. Dies ist dann nützlich, wenn Publisher Nachrichten auf "Bericht bei Ausnahme"-Grundlage senden und es einige Zeit dauern kann, bis ein neuer Subskribent Daten zu einem bestimmten Thema erhält. Die Daten haben den Wert "retained" (zurückbehalten) oder Last Known Good (LKG).

Nachdem ein Subskribent eine SUBSCRIBE-Nachricht für ein oder mehrere Themen versendet hat, erhält er eine SUBACK-Nachricht, gefolgt von einer Nachricht für jedes neu abonnierte Thema mit zurückbehaltenem Wert. Der zurückbehaltene Wert wird vom Broker an den Subskribenten mit eingerichtetem Retain-Argument und derselben QoS veröffentlicht, mit der er ursprünglich veröffentlicht wurde. Daher unterliegt er den üblichen QoS-Zustellungszusicherungen. Das Retain-Argument wird in der Nachricht an die Subskribenten festgelegt, damit sie sich von "Live"-Daten unterscheidet und vom Subskribenten entsprechend behandelt wird.

Da ein Broker eine zuvor zurückbehaltene PUBLISH-Nachricht unter Umständen nicht länger einbehält, ist es nicht garantiert, dass der Subskribent eine ursprünglich zurückbehaltene PUBLISH-Nachricht zu einem Thema erhält.

Verbleibende Länge

Position: Byte 2.

Stellt die Anzahl der in der aktuellen Nachricht verbleibenden Bytes dar, einschließlich der Daten im variablen Header und in der Nutzlast.

Das variable Längenverschlüsselungsschema verwendet ein Einzel-Byte für Nachrichten mit einer Länge von bis zu 127 Bytes. Längere Nachrichten werden wie folgt bearbeitet: Sieben Bit von jedem Byte verschlüsseln die Daten zur verbleibenden Länge, das achte Bit zeigt nachfolgende Bytes an. Jedes Byte verschlüsselt 128 Werte und ein "Fortsetzungsbit". Beispiel: Die Zahl 64 dezimal wird als Einzel-Byte, Dezimalwert 64, Hexadezimalwert 0x40, verschlüsselt. Die Zahl 321 dezimal (=128x2 + 65) wird als zwei Bytes, Least Significant First, verschlüsselt. Das erste Byte ist 2+128 = 130. Beachten Sie, dass das oberste Bit festgelegt wird, um mindestens ein nachfolgendes Byte anzuzeigen. Das zweite Byte ist 65.

Das Protokoll beschränkt die Byte-Anzahl in der Darstellung auf vier. Somit können Anwendungen Nachrichten von bis zu 268 435 455 (256 MB) senden. Die Darstellung dieser Zahl beim Senden sieht wie folgt aus: 0xFF, 0xFF, 0xFF, 0x7F.

In der nachfolgenden Tabelle werden die Werte für die verbleibende Länge, dargestellt durch ansteigende Byte-Zahlen, gezeigt.

Ziffern Von Bis
1 0 (0x00) 127 (0x7F)
2 128 (0x80, 0x01) 16 383 (0xFF, 0x7F)
3 16 384 (0x80, 0x80, 0x01) 2 097 151 (0xFF, 0xFF, 0x7F)
4 2 097 152 (0x80, 0x80, 0x80, 0x01) 268 435 455 (0xFF, 0xFF, 0xFF, 0x7F)

Der Algorithmus zur Verschlüsselung einer Dezimalzahl (X) in das variable Längenverschlüsselungsschema lautet wie folgt:

do
  digit = X MOD 128
  x = X DIV 128
  // Legen Sie das oberste Bit dieser Ziffer fest, wenn mehrere Ziffern verschlüsselt werden sollen
  if ( X > 0 )
    digit = digit OR 0x80
  endif
  'Ausgabe' digit
while ( X > 0 )

dabei steht MOD für den Modulo-Operator (% in C), DIV für die Ganzzahlteilung (/ in C) und OR ist der Operator 'bitweises ODER'(| in C).

Der Algorithmus zur Entschlüsselung des Feldes für die verbleibende Länge lautet wie folgt:

Multiplikator = 1
     Wert = 0
     do
          digit = 'nächste Ziffer von Datenstrom'
          value += (digit AND 127) * multiplier;
          multiplier *= 128;
     while ((digit AND 128) != 0);

dabei steht AND für den Operator 'bitweises ODER' (& in C).

Wenn dieser Algorithmus beendet ist, enthält value die verbleibende Länge in Bytes.

Die Verschlüsselung der verbleibenden Länge ist nicht Teil des variables Headers. Die Anzahl der zur Verschlüsselung der verbleibenden Länge verwendeten Bytes trägt nicht zum Wert der verbleibenden Länge bei. Die "Erweiterungs-Bytes" mit variabler Länge sind Teil des festen Headers, nicht des variablen Headers.

Zugehörige Konzepte
WebSphere MQ Telemetry Transport
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac10870_