SUBSCRIBE - Suscribir a temas indicados

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

Cabecera fija

En la tabla siguiente se muestra el formato de cabecera fija.

bit 7 6 5 4 3 2 1 0
byte 1 Tipo de mensaje (8) Distintivo 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 reconocer varias peticiones de suscripción. El mensaje SUBACK correspondiente se identifica emparejando el ID de mensaje. También maneja los reintentos de mensajes SUBSCRIBE de la misma forma que los mensajes PUBLISH.
Distintivo DUP
En este ejemplo, el distintivo DUP se establece en cero (0) para indicar que el mensaje se ha enviado por primera vez. Si este mensaje se vuelve a enviar porque no ha llegado un mensaje SUBACK una vez transcurrido el tiempo de espera especificado, se establece el bit DUP para indicar al intermediario que puede ser un duplicado de un mensaje ya recibido.
Distintivo RETAIN
No se utiliza.
Campo Longitud restante
La longitud de la carga útil. Puede ser un campo de varios bytes.

Cabecera variable

La cabecera variable contiene un ID de mensaje porque un mensaje SUBSCRIBE tiene un nivel de QoS 1.

Normalmente, la biblioteca de protocolos genera el ID de mensaje y lo pasa a la aplicación de publicación, por ejemplo, como manejador de retorno. Esto impide que varias aplicaciones o varias hebras de publicación que se ejecutan en un cliente individual generen ID de mensaje duplicados.

El ID de mensaje 0 (0x0000) está reservado porque es un ID de mensaje no válido y no debe utilizarse. El ID de mensaje es un entero de 16 bits sin signo que normalmente se incrementa en una unidad entre un mensaje y el siguiente, pero no es necesario que lo haga. Los dos bytes del ID de mensaje se ordenan como MSB, seguidos de LSB (big endian).

En la tabla siguiente se muestra un formato de ejemplo para la cabecera variable con el ID de mensaje 10.

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

Carga útil

La carga útil del mensaje SUBSCRIBE contiene una lista de nombres de temas al que el cliente desea suscribirse y el nivel de QoS en el que el cliente desea recibir los mensajes. Las series están codificadas en UTF y el nivel de QoS ocupa 2 bits de un solo byte. Estos pares de tema/QoS se empaquetan contiguamente como se muestra en el ejemplo de carga útil que se muestra en la tabla siguiente.

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

Los nombres de tema en un mensaje SUBSCRIBE no están comprimidos.

En la tabla siguiente se muestra el formato de la carga útil de ejemplo.

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

Suponiendo que se otorga el nivel de QoS solicitado, el cliente recibe mensajes PUBLISH con un nivel menor o igual a este, en función del nivel de QoS del mensaje original del publicador. Por ejemplo, si un cliente tiene una suscripción con un nivel de QoS 1 para un tema concreto, un mensaje PUBLISH de nivel de QoS 0 para dicho tema se entrega al cliente en el nivel de QoS 0. Un mensaje PUBLISH de nivel de QoS 2 para el mismo tema se degrada hasta nivel de QoS 1 para su entrega al cliente.

Un corolario a esto es que la suscripción a un tema a nivel de QoS 2 es equivalente a decir "Me gustaría recibir mensajes sobre este tema al nivel de QoS en el que se publican".

El campo QoS solicitado está codificado en el byte que sigue a cada nombre de tema codificado UTF, como se muestra en la tabla siguiente.

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 reservan para un uso futuro.

Respuesta

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

Conceptos relacionados
WebSphere MQ Telemetry Transport

Referencia relacionada
PUBLISH - Mensaje de publicación
Calidad de niveles de servicio y flujos de WebSphere MQ Telemetry Transport
Cabecera fija de WebSphere MQ Telemetry Transport
Cabecera variable de WebSphere MQ Telemetry Transport
Carga útil de WebSphere MQ Telemetry Transport