Cabeçalho Fixo do WebSphere MQ Telemetry Transport

O cabeçalho da mensagem para cada mensagem de comando do WebSphere MQ Telemetry Transport contém um cabeçalho fixo. A tabela abaixo mostra o formato do cabeçalho fixo.

bit 7 6 5 4 3 2 1 0
byte 1 Tipo de Mensagem Sinalizador DUP Nível de QoS RETAIN
byte 2 Comprimento Restante
Byte 1

Contém os campos Tipo de Mensagem e Sinalizadores (Dup, nível QoS e RETAIN).

Byte 2

(Pelo menos um byte) contém o campo Comprimento Restante.

Os campos são descritos nas seguintes seções. Todos os valores de dados estão em ordem big-endian: os bytes de ordem mais alta precedem os de ordem mais baixa. Uma palavra com 16 bits é apresentada na ligação como MSB (Byte Mais Significativo), seguida por LSB (Byte Menos Significativo).

Tipo de Mensagem

Posição: byte 1, bits 7-4.

Representado como um valor de 4 bits não assinado. As enumerações para esta versão do protocolo são mostradas na tabela abaixo:

Mnemônico Enumeração Descrição
Reserved 0 Reserved
CONNECT 1 Pedido do cliente para conectar-se ao Intermediário
CONNACK 2 Confirmação de Conexão
PUBLISH 3 Mensagem de Publicação
PUBACK 4 Confirmação de Publicação
PUBREC 5 Publicação recebida (parte 1 com entrega garantida)
PUBREL 6 Liberação de publicação (parte 2 com entrega garantida)
PUBCOMP 7 Conclusão de publicação (parte 3 com entrega garantida)
SUBSCRIBE 8 Pedido de assinatura do cliente
SUBACK 9 Confirmação de Assinatura
UNSUBSCRIBE 10 Pedido de cancelamento de assinatura do cliente
UNSUBACK 11 Confirmação de Cancelamento de Assinatura
PINGREQ 12 Pedido de executar PING
PINGRESP 13 Resposta de executar PING
DISCONNECT 14 O cliente está se desconectando
Reserved 15 Reserved

Flags

Os bits restantes de byte 1 contêm os campos DUP, QoS e RETAIN. As posições de bits são codificadas para representar os sinalizadores conforme mostrados na tabela abaixo.

Posição do Bit Name Descrição
3 DUP Entrega duplicada
2-1 QoS Qualidade de serviço
0 RETAIN Sinalizador RETAIN
DUP

Posição: byte 1, bit 3.

Este sinalizador é definido quando o cliente ou intermediário tenta entregar novamente uma mensagem PUBLISH. Isso se aplica a mensagens nas quais o valor de QoS é maior que zero (0) e é requerida uma confirmação. Quando o bit DUP é definido, o cabeçalho variável inclui um ID de Mensagem.

QoS

Posição: byte 1, bits 2-1.

Esse sinalizador indica o nível de garantia de entrada de uma mensagem PUBLISH. Os níveis de QoS são mostrados na tabela abaixo.

Valor de QoS bit 2 bit 1 Descrição
0 0 0 No máximo uma vez Enviar e Esquecer <=1
1 0 1 Pelo menos uma vez Entrega confirmada >=1
2 1 0 Exatamente uma vez Entrega assegurada =1
3 1 1 Reserved
RETAIN

Posição: byte 1, bit 0.

Quando definido, o sinalizador Retain indica que o intermediário retém a mensagem e a envia como uma mensagem inicial para novos assinantes desse tópico. Isso significa que um novo cliente que está se conectando ao intermediário pode rapidamente estabelecer o número atual de tópicos. Isso é útil quando os editores enviam mensagens em uma base "relatório por exceção" e isso pode ocorrer algum tempo antes de um novo assinante receber dados sobre um determinado tópico. Os dados possuem um valor de retido ou LKG (Last Known Good).

Após o envio de uma mensagem SUBSCRIBE para um ou mais tópicos, um assinante recebe uma mensagem SUBACK, seguida por uma mensagem para cada tópico recém-assinado que tenha um valor retido. O valor retido é publicado do intermediário para o assinante com o sinalizador Retain definido e com o mesmo QoS com o qual ele foi originalmente publicado e, portanto, está sujeito às garantias usuais de entrega de QoS. O sinalizador Retain é definido na mensagem para os assinantes, para distingui-lo de dados "ativos" para que ele possa ser tratado apropriadamente pelo assinante.

Como um intermediário pode não mais conter uma mensagem PUBLISH Retida anteriormente, não há garantia de que o assinante receberá uma mensagem PUBLISH inicial Retida em um tópico.

Comprimento Restante

Posição: byte 2.

Representa o número de bytes restantes na mensagem atual, incluindo dados no cabeçalho variável e na carga útil.

O esquema de codificação de comprimento variável utiliza um tipo simples para mensagens com até 127 bytes. As mensagens mais longas são tratadas da seguinte forma. Sete bits de cada byte codificam dados de Comprimento Restante e o oitavo bit indica quaisquer bytes seguintes na representação. Cada byte codifica 128 valores e um "bit de continuação". Por exemplo, o número decimal 64 é codificado como um byte único, valor decimal 64, hex 0x40. O número decimal 321 (=128x2 + 65) é codificado como dois bytes, primeiro o menos significativo. O primeiro byte é 2+128 = 130. Observe que o bit superior é definido para indicar pelo menos um byte seguinte. O segundo byte é 65.

O protocolo limita o número de bytes na representação a um máximo de quatro. Esse permite que os aplicativos enviem mensagens de até 268 435 455 (256 MB). A representação deste número na ligação é: 0xFF, 0xFF, 0xFF, 0x7F.

A tabela abaixo mostra os valores de Comprimento Restante representados pelo aumento do número de bytes.

Dígitos De 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)

O algoritmo para codificação de um número decimal (X) no esquema de codificação de comprimento variável é o seguinte:

     do
    digit = X MOD 128
    x = X DIV 128
    // se houver mais dígitos a serem codificados, defina o bit superior deste dígito
  if ( X > 0 )
        digit = digit OR 0x80
    endif
    'output' digit
while ( X > 0 )

em que MOD é o operador de módulo (% em C), DIV é a divisão de inteiro (/ em C), e OR é bit-wise ou (| em C).

O algoritmo para decodificação do campo Comprimento Restante é o seguinte:

multiplier = 1
          value = 0
          do
                    digit = 'next digit from stream'
                    value += (digit AND 127) * multiplier;
                    multiplier *= 128;
          while ((digit AND 128) != 0);

em que AND é o operador e compreende bits (& em C).

Quando este algoritmo é finalizado, value contém o Comprimento Restante em bytes.

A codificação de Comprimento Restante não faz parte do cabeçalho variável. O número de bytes utilizados para codificar o Comprimento Restante não contribui para o valor do Comprimento Restante. Os "bytes de extensão" de comprimento variável fazem parte do cabeçalho fixo, não do cabeçalho variável.

Conceitos relacionados
WebSphere MQ Telemetry Transport
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac10870_