PUBLISH - Mensaje de publicación

Un mensaje de publicación PUBLISH lo envía un cliente al intermediario para su distribución a los suscriptores interesados. Cada mensaje PUBLISH está asociado a un nombre de tema (denominado también Asunto o Canal). Es un espacio de nombres jerárquico que define una taxonomía de fuentes de información para las que los suscriptores pueden registrar un interés. Un mensaje que se publica en un nombre de tema específico se entrega a los suscriptores conectados para dicho tema.

Para mantener la simetría, si un cliente suscribe uno o más temas, el intermediario envía al cliente todos los mensajes publicados en dichos temas como un mensaje PUBLISH.

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 (3) Distintivo DUP Nivel de QoS RETAIN
  0 0 1 1 0 0 1 0
byte 2 Longitud restante
Nivel de QoS
Se establece en 1.
Distintivo DUP
Se establece en cero (0). Esto significa que el mensaje se envía por primera vez.

Para los mensajes con nivel de QoS 1 o 2 que se vuelven a enviar porque se ha detectado una anomalía, el bit DUP se establece en 1. Esto indica al intermediario que el mensaje puede ser un duplicado de un mensaje que ya se ha recibido. La importancia de esta información para el intermediario depende del nivel de QoS. El bit DUP no se utiliza para mensajes con nivel de QoS 0.

Distintivo RETAIN
Se establece en cero. Esto significa no retener.
Campo Longitud restante
La longitud de la cabecera variable más la longitud de la carga útil. Puede ser un campo de varios bytes.

Cabecera variable

La cabecera variable contiene los siguientes campos:

Nombre de tema
Serie de caracteres codificada en UTF.
ID de mensaje
Existe para los mensajes con nivel de QoS 1 y nivel de QoS 2.

Normalmente, la biblioteca de protocolos se ocupa de generar el ID de mensaje y vuelve a pasar a la aplicación de publicación, posiblemente como manejador de retorno. Este método evita el peligro de que varias aplicaciones, o hebras de publicación, se ejecuten en un solo cliente generando ID de mensajes duplicados.

Un ID de mensaje no debe utilizarse en la cabecera variable para mensajes con el nivel de QoS 0.

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. El orden de los dos bytes del identificador de mensaje es MSB y después LSB (big-endian).

El ID de mensaje 0 (es decir, 0x0000) está reservado porque es un ID de mensaje no válido y no debe utilizarse.

En la tabla siguiente se muestra una cabecera variable de ejemplo para un mensaje PUBLISH.

Campo Valor
Nombre de tema: "a/b"
Nivel de QoS 1
ID de mensaje: 10

En la tabla siguiente se muestra el formato de la cabecera variable en este caso.

  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
Identificador de mensaje
byte 6 ID de mensaje MSB (0) 0 0 0 0 0 0 0 0
byte 7 ID de mensaje LSB (10) 0 0 0 0 1 0 1 0

Carga útil

Contiene los datos para la publicación. El contenido y el formato de los datos son específicos de la aplicación. El campo Longitud restante en la cabecera fija incluye tanto la cabecera variable como la longitud de carga útil.

Respuesta

La respuesta a un mensaje PUBLISH depende del nivel de QoS. En la tabla siguiente se muestran las respuestas esperadas.

Nivel de QoS Respuesta esperada
QoS 0 Ninguna
QoS 1 PUBACK
QoS 2 PUBREC

Acciones

Los mensajes PUBLISH pueden enviarse desde un publicador al intermediario o desde el intermediario a un suscriptor. La acción del destinatario cuando recibe un mensaje depende del nivel de QoS del mensaje:

QoS 0
Ponga el mensaje a disposición de las partes interesadas.
QoS 1
Anote el mensaje en el almacenamiento permanente, póngalo a disposición de todas las partes interesadas y devuelva un mensaje PUBACK al emisor.
QoS 2
Anote el mensaje en el almacenamiento permanente, no lo ponga todavía a disposición de las partes interesadas y devuelva un mensaje PUBREC al emisor.

Si el intermediario recibe el mensaje, las partes interesadas son los suscriptores al tema del mensaje PUBLISH. Si un suscriptor recibe el mensaje, las partes interesadas son la aplicación en el cliente que se ha suscrito a uno o más temas y que está esperando un mensaje del intermediario.

Conceptos relacionados
WebSphere MQ Telemetry Transport

Referencia relacionada
Cabecera fija de WebSphere MQ Telemetry Transport
Cabecera variable de WebSphere MQ Telemetry Transport
Calidad de niveles de servicio y flujos de WebSphere MQ Telemetry Transport
Carga útil de WebSphere MQ Telemetry Transport