Intestazione fissa di WebSphere MQ Telemetry Transport

L'intestazione del messaggio per ogni messaggio di comando WebSphere MQ Telemetry Transport contiene un'intestazione fissa. La seguente tabella mostra il formato dell'intestazione fissa.

bit 7 6 5 4 3 2 1 0
byte 1 Tipo messaggio Indicatore DUP Livello QoS RETAIN
byte 2 Lunghezza rimanente
Byte 1

Contiene i campi Tipo messaggio e Indicatori (Dup, livello QoS e RETAIN).

Byte 2

(Almeno un byte) contiene il campo Lunghezza rimanente.

I campi sono descritti nelle seguenti sezioni. Tutti i valori di dati sono in ordine big-endian: i byte di ordine superiore precedono quelli di ordine inferiore. Una parola a 16-bit è presentata nel collegamento via cavo come MSB (Most Significant Byte), seguita da LSB (Least Significant Byte).

Tipo messaggio

Posizione: byte 1, bit 7-4.

Rappresentato come valore di 4 bit senza segno. Le numerazioni per questa versione del protocollo sono mostrate nella seguente tabella.

Mnemonico Numerazione Descrizione
Riservato 0 Riservato
CONNECT 1 Richiesta client di connessione al broker
CONNACK 2 Conferma connessione
PUBLISH 3 Messaggio di pubblicazione
PUBACK 4 Conferma pubblicazione
PUBREC 5 Pubblicazione ricevuta (consegna garantita parte 1)
PUBREL 6 Rilascio pubblicazione (consegna garantita parte 2)
PUBCOMP 7 Pubblicazione completata (consegna garantita parte 3)
SUBSCRIBE 8 Richiesta sottoscrizione client
SUBACK 9 Conferma sottoscrizione
UNSUBSCRIBE 10 Richiesta annullamento sottoscrizione client
UNSUBACK 11 Conferma annullamento sottoscrizione
PINGREQ 12 Richiesta PING
PINGRESP 13 Risposta PING
DISCONNECT 14 Il client si sta scollegando
Riservato 15 Riservato

Indicatori

I bit rimanenti del byte 1 contengono i campi DUP, QoS e RETAIN. Le posizioni bit sono codificate per rappresentare gli indicatori come mostrato nella seguente tabella.

Posizione bit Nome Descrizione
3 DUP Consegna duplicato
2-1 QoS Quality of Service
0 RETAIN Indicatore RETAIN
DUP

Posizione: byte 1, bit 3.

Questo indicatore è impostato quando il client o il broker tenta di riconsegnare un messaggio PUBLISH. Questo si applica ai messaggi in cui il valore di QoS è maggiore di zero (0) ed è richiesta una conferma. Quando il bit DUP è impostato, l'intestazione della variabile include un ID di messaggio.

QoS

Posizione: byte 1, bit 2-1.

Questo indicatore mostra il livello di garanzia della consegna di un messaggio PUBLISH. I livelli QoS sono mostrati nella seguente tabella.

Valore QoS 2 bit 1 bit Descrizione
0 0 0 Almeno una volta Fire and Forget <=1
1 0 1 Almeno una volta Consegna confermata >=1
2 1 0 Esattamente una volta Consegna garantita =1
3 1 1 Riservato
RETAIN

Posizione: byte 1, bit 0.

Quando è impostato, l'indicatore Retain specifica che il broker conserva il messaggio e lo invia come messaggio iniziale ai nuovi sottoscrittori a questo argomento. Questo significa che un nuovo client che si connette al broker può stabilire rapidamente il numero attuale di argomenti. Questo è utile nel caso in cui gli autori (publisher) inviino messaggi su base "prospetto per eccezione" e potrebbe trascorrere un po' di tempo prima che un nuovo sottoscrittore riceva i dati su un particolare argomento. I dati hanno un valore di conservato o LKG (Last Known Good).

Una volta inviato un messaggio SUBSCRIBE a uno o più argomenti, un sottoscrittore riceve un messaggio SUBACK, seguito da un messaggio per ogni argomento appena sottoscritto, che abbia un valore di conservato. Il valore di conservato è pubblicato dal broker per il sottoscrittore con l'indicatore Retain impostato e con lo stesso QoS con cui è stato originariamente pubblicato e quindi è soggetto alle normali garanzie di consegna QoS. L'indicatore Retain è impostato nel messaggio per i sottoscrittori, per distinguerlo dai dati "in tempo reale" affinché venga gestito nel modo appropriato dal sottoscrittore.

Poiché un broker potrebbe non conservare più un messaggio PUBLISH precedentemente conservato, non c'è garanzia che il sottoscrittore riceva un messaggio iniziale PUBLISH conservato su un argomento.

Lunghezza rimanente

Posizione: byte 2.

Rappresenta il numero di byte rimanenti all'interno del messaggio corrente, compresi i dati nell'intestazione variabile e nel payload.

Lo schema di codifica della lunghezza variabile utilizza un singolo byte per messaggi fino a una lunghezza di 127 byte. I messaggi più lunghi sono gestiti nel modo seguente. Sette bit per ogni byte codificano i dati relativi alla Lunghezza rimanente e l'ottavo bit indica tutti i byte successivi nella rappresentazione. Ogni byte codifica 128 valori e un "bit di continuazione". Ad esempio, il numero 64 decimale è codificato come singolo byte, valore decimale 64, esadecimale 0x40. Il numero 321 decimale (=128x2 + 65) è codificato come due byte, il meno significativo per primo. Il primo byte è 2+128 = 130. Si noti che il bit al livello più alto è impostato per indicare almeno uno dei byte successivi. Il secondo byte è 65.

Il protocollo limita il numero di byte nella rappresentazione fino a un massimo di quattro. Questo consente alle applicazioni di inviare messaggi fino a 268 435 455 (256 MB). La rappresentazione di questo numero nel collegamento via cavo è: 0xFF, 0xFF, 0xFF, 0x7F.

La seguente tabella mostra i valori della Lunghezza rimanente rappresentati da numeri di byte di valore crescente.

Cifre Da A
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)

L'algoritmo per la codifica di un numero decimale (X) nello schema di codifica della lunghezza variabile è il seguente:

do
  digit = X MOD 128
  x = X DIV 128
  // Se vi sono più cifre da codificare, impostare il bit di livello più elevato di questa cifra
  if ( X > 0 )
    digit = digit OR 0x80
  endif
  'output' digit
while ( X > 0 )

dove MOD è l'operatore modulo (% in C), DIV è la divisione numero intero (/ in C) e OR è l'equivalente in bit o (| in C).

L'algoritmo per decodificare il campo Lunghezza rimanente è il seguente:

multiplier = 1 
     value = 0 
     do 
          digit = 'la cifra successiva dal flusso' 
          value += (digit AND 127) * multiplier; 
          multiplier *= 128;
     while ((digit AND 128) != 0);

dove AND è l'equivalente in bit e l'operatore (& in C).

Quando termina questo algoritmo, value contiene la Lunghezza rimanente in byte.

La codifica della Lunghezza rimanente non fa parte dell'intestazione variabile. Il numero di byte utilizzato per codificare la Lunghezza rimanente non contribuisce al valore della Lunghezza rimanente. I "byte di estensione" della lunghezza variabile fanno parte dell'intestazione fissa, non dell'intestazione variabile.

Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac10870_