SUBSCRIBE Inscrever-se em Tópicos Denominados

A mensagem SUBSCRIBE permite que um cliente registre um interesse em um ou mais nomes de tópicos com o intermediário. As mensagens publicadas nesses tópicos são entregues do intermediário para o cliente como mensagens PUBLISH. A mensagem SUBSCRIBE também especifica o nível de QoS no qual o assinante deseja receber mensagens publicadas.

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 (8) Sinalizador DUP Nível de QoS RETAIN
  1 0 0 0 0 0 1 x
byte 2 Comprimento Restante
Nível de QoS
As mensagens SUBSCRIBE utilizam o nível de QoS 1 para confirmar recebimento de vários pedidos de assinaturas. A mensagem SUBACK correspondente é identificada pela correspondência do ID da Mensagem. Ele também manipula tentativas de mensagens SUBSCRIBE da mesma forma que mensagens PUBLISH.
Sinalizador DUP
Neste exemplo, o sinalizador DUP é definido como zero (0) para indicar que a mensagem está sendo enviada pela primeira vez. Se esta mensagem estiver sendo reenviada porque uma mensagem SUBACK não chegou após um período de tempo especificado, o bit DUP será definido para indicar ao intermediário que ela pode ser uma duplicata de uma mensagem já recebida.
Sinalizador RETAIN
Não utilizado.
Campo Comprimento Restante
O comprimento da carga útil. Ele pode ser um campo com vários bytes.

Cabeçalho Variável

O cabeçalho variável contém um ID da Mensagem porque uma mensagem SUBSCRIBE possui um nível de QoS 1.

Geralmente, a biblioteca de protocolos gera o ID da Mensagem e o transmite de volta ao aplicativo de publicação, por exemplo, como uma identificador de retorno. Isso impede vários aplicativos ou vários encadeamentos de publicação, em execução em um único cliente de gerarem IDs de Mensagem duplicados.

O ID da Mensagem 0 (0x0000) está reservado como um ID da Mensagem inválido, e não deve ser utilizado. O ID de Mensagem é um inteiro não sinalizado de 16 bits, que geralmente aumenta exatamente uma vez, de uma mensagem para a próxima, mas não é necessário fazer isso. Os dois bytes do ID da Mensagem são ordenados como MSB, seguidos por LSB (big-endian).

A tabela abaixo mostra um formato de exemplo para o cabeçalho variável com um ID de Mensagem de 10.

  Descrição 7 6 5 4 3 2 1 0
Identificador de Mensagens
byte 1 ID da Mensagem MSB (0) 0 0 0 0 0 0 0 0
byte 2 ID da Mensagem LSB (10) 0 0 0 0 1 0 1 0

Carga Útil

A carga útil de uma mensagem SUBSCRIBE contém uma lista de nomes de tópicos para os quais o cliente deseja fazer assinatura e o nível de QoS no qual o cliente deseja receber mensagens. As cadeias são codificadas por UTF e o nível de QoS ocupa 2 bits de um único byte. Estes pares de tópico/QoS são compactados de forma contígua, conforme mostrado na carga útil de exemplo na tabela abaixo.

Nome do Tópico "a/b"
QoS Solicitado 1
Nome do Tópico "c/d"
QoS Solicitado 2

Os nomes de tópicos em uma mensagem SUBSCRIBE não são compactados.

O formato da carga útil de exemplo é mostrado na tabela abaixo.

  Descrição 7 6 5 4 3 2 1 0
Nome do Tópico
byte 1 Comprimento MSB (0) 0 0 0 0 0 0 0 0
byte 2 Comprimento 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
QoS Solicitado
byte 6 QoS Solicitado (1) x x x x x x 0 1
Nome do Tópico
byte 7 Comprimento MSB (0) 0 0 0 0 0 0 0 0
byte 8 Comprimento 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
QoS Solicitado
byte 12 QoS Solicitado (2) x x x x x x 1 0

Assumindo que o nível de QoS solicitado seja concedido, o cliente recebe mensagens PUBLISH em nível menor ou igual a esse, dependendo do nível de QoS da mensagem original do editor. Por exemplo, se um cliente tiver uma assinatura de nível de QoS 1 para um determinado tópico, uma mensagem PUBLISH de nível de QoS 0 será entregue para o cliente no nível de QoS 0. Uma mensagem PUBLISH de nível de QoS 2 para o mesmo tópico é rebaixada para o nível de QoS 1 para entrega para o cliente.

O resultado disso é que a assinatura para um tópico no nível de QoS 2 é equivalente a informar "Desejo receber mensagens sobre este tópico no QoS no qual elas são publicadas".

O campo QoS Solicitado é codificado no byte após cada nome de tópico codificado por UTF conforme mostrado na tabela abaixo.

bit 7 6 5 4 3 2 1 0
  Reservado Reservado Reservado Reservado Reservado Reservado Nível de QoS
  x x x x x x    

Os 6 bits superiores deste byte não são utilizados na versão atual do protocolo. Eles estão reservados para utilização futura.

Resposta

Quando recebe uma mensagem SUBSCRIBE de um cliente, o intermediário responde com uma mensagem SUBACK.

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
ac11010_