SUBSCRIBE Subscripción a temas específicos

El mensaje SUBSCRIBE permite a un cliente registrar un interés por uno o más nombres de temas con el intermediario. Los mensajes publicados para esos temas se entregan desde el intermediario al cliente como mensajes PUBLISH. El mensaje SUBSCRIBE también especifica el nivel de QoS con el cual el suscriptor desea recibir mensajes publicados.

Cabecera fija

La tabla de abajo describe el formato de la cabecera fija:

bit 7 6 5 4 3 2 1 0
byte 1 Tipo de mensaje (8) Indicador DUP Nivel de QoS RETAIN
  1 0 0 0 0 0 1 x
byte 2 Longitud restante
Nivel de QoS
Los mensajes SUBSCRIBE utilizan el nivel de QoS 1 para acusar rebibo de múltiples peticiones de suscripción. El mensaje SUBACK correspondiente se identifica comparando el ID de mensaje. Esto también maneja los reintentos de mensajes SUBSCRIBE del mismo modo que los mensajes PUBLISH.
Indicador DUP
En este ejemplo, el indicador DUP se establece en cero (0) para indicar que el mensaje se está enviando por primera vez. Si el mensaje se está volviendo a enviar debido a que no ha llegado un mensaje SUBACK después de un tiempo de espera excedido especificado, se establece el bit de DUP para indicar al intermediario que puede haberse recibido ya un duplicado del mensaje.
Indicador RETAIN
No usado.
Campo de longitud restante
Es la longitud de la carga útil. Este campo puede ser de múltiples bytes.

Cabecera variable

La cabecera variable contiene un ID de mensaje debido a que un mensaje SUBSCRIBE tiene un nivel de QoS 1.

Normalmente, la biblioteca de protocolos genera el ID de mensaje (Message ID) y lo devuelve a la aplicación de publicación como, por ejemplo, un manejador de devolución. Esto evita que varias aplicaciones o hebras de publicación se ejecuten en un solo cliente, generen ID de mensajes duplicados.

El ID de mensaje 0 (0x0000) está reservado como ID de mensaje no válido y no debe usarse. El ID de mensaje es un entero sin signo, de 16 bits, que normalmente aumenta exactamente en 1 de un mensaje a otro, pero que no está obligado a hacerlo. Los dos bytes del ID de mensaje están ordenados como MSB seguido de LSB (big-endian).

La tabla que sigue muestra un formato de ejemplo para la cabecera variable con un ID de mensaje 10.

  Descripción 7 6 5 4 3 2 1 0
Identificador de mensaje
byte 1 MSB de ID de mensaje 0 0 0 0 0 0 0 0
byte 2 LSB de ID de mensaje (10) 0 0 0 0 1 0 1 0

Carga útil

La carga útil de un mensaje SUBSCRIBE contiene una lista de nombres de temas a los que el cliente desea suscribirse y el nivel de QoS con el que el cliente desea recibir los mensajes. Las series de caracteres están codificadas en UTF y el nivel de QoS ocupa 2 bits de un solo byte. Estos pares de tema/QoS se empaquetan de forma contigua como puede verse en el ejemplo de carga útil de la tabla que sigue.

Nombre de tema "a/b"
QoS solicitado 1
Nombre de tema "c/d"
QoS solicitado 2

Los nombres de temas de un mensaje SUBSCRIBE no se comprimen.

El formato del ejemplo de carga útil puede verse en la tabla que sigue.

  Descripción 7 6 5 4 3 2 1 0
Nombre de tema
byte 1 MSB de longitud (0) 0 0 0 0 0 0 0 0
byte 2 LSB de longitud (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
Nombre de tema
byte 7 MSB de longitud (0) 0 0 0 0 0 0 0 0
byte 8 LSB de longitud (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

Suponiendo que se haya otorgado el nivel de QoS solicitado, el cliente recibe los mensajes PUBLISH a un nivel inferior o igual a dicho nivel, dependiendo del nivel de QoS del mensaje original procedente del publicador. Por ejemplo, si un cliente tiene una suscripción a un tema determinado con un nivel de QoS 1, un mensaje PUBLISH con un nivel de QoS 0 se entregará al cliente al nivel de QoS 0. Un mensaje PUBLISH con un nivel de QoS 2 para el mismo tema bajará su nivel al nivel de QoS 1 para entregarlo al cliente.

Una consecuencia de lo anterior es que realizar una suscripción a un tema con el nivel de QoS 2 es igual que decir "Quisiera recibir mensajes sobre este tema con el nivel de QoS al que se publiquen".

El campo QoS solicitado se codifica en el byte que sigue a cada nombre de tema codificado en UTF, como se indica en la tabla que sigue.

bit 7 6 5 4 3 2 1 0
  Reservado Reservado Reservado Reservado Reservado Reservado Nivel de QoS
  x x x x x x    

Los 6 bits superiores de este byte no se utilizan en la versión actual del protocolo. Se han reservado para un uso posterior.

Respuesta

Cuando recibe un mensaje SUBSCRIBE procedente de un cliente, el intermediario responde con un mensaje SUBACK.

Conceptos relacionados
WebSphere MQ Telemetry Transport
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac11010_