Un mensaje PUBLISH es enviado por un cliente a un intermediario para su distribución a los suscriptores interesados. Cada mensaje de publicación (PUBLISH) está asociado a un nombre de tema (conocido también como el Sujeto o Canal). Es un espacio de nombres que define una taxonomía de fuentes de información para las cuales los suscriptores pueden manifestar un interés. Un mensaje publicado para un nombre de tema específico se entrega a los suscriptores conectados para dicho tema.
Para mantener una simetría, si un cliente se suscribe a uno o más temas, cualquier mensaje publicado para dichos temas se enviará mediante el intermediario al cliente como mensaje PUBLISH.
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 (3) | Indicador DUP | Nivel de QoS | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
byte 2 | Longitud restante |
Para mensaje con un nivel de QoS 1 ó 2 que se están volviendo a enviar debido a que se ha detectado un error, el bit DUP se establece en 1. Esto indica al intermediario que el mensaje podría duplicar un mensaje que ya se hubiese recibido. El significado de esta información para el intermediario depende del nivel de QoS. El bit de DUP no se utiliza para mensajes con un nivel de QoS 0.
La cabecera variable contiene los siguientes campos:
Normalmente, la biblioteca de protocolos es la responsable de la generación del ID de mensaje (Message ID) y de devolverlo a la aplicación de publicación, posiblemente como un manejador de devolución. Este enfoque evita el riesgo de tener varias aplicaciones o hebras de publicación ejecutándose en un solo cliente generen ID de mensajes duplicados.
Un ID de mensaje no debe utilizarse en la cabecera variable para mensajes cuyo nivel de QoS sea 0.
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. El orden de los 2 bytes del identificador de mensaje es MSB y a continuación LSB (big-endian).
El ID de mensaje 0 (es decir, 0x0000) está reservado como ID de mensaje no válido y no debe utilizarse.
La tabla que sigue muestra un ejemplo de cabecera variable para un mensaje de publicación (PUBLISH).
Campo | Valor |
---|---|
Nombre del tema: | "a/b" |
Nivel de QoS | 1 |
ID de mensaje | 10 |
El formato de cabecera variable aparece, en este caso, en la tabla que sigue.
Descripción | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
---|---|---|---|---|---|---|---|---|---|
Nombre del 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 |
Identificador de mensaje | |||||||||
byte 6 | MSB de ID de mensaje | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 7 | LSB de ID de mensaje (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
Contiene los datos para la publicación. El contenido y el formato de los datos es específico de la aplicación. El campo de D restante de la cabecera fija incluye la longitud de la cabecera variable y la longitud de la carga útil.
La respuesta a un mensaje PUBLISH depende el nivel de QoS. La tabla que sigue muestra las respuestas esperadas.
Nivel de QoS | Respuesta esperada |
---|---|
QoS 0 | Ninguna |
QoS 1 | PUBACK |
QoS 2 | PUBREC |
Los mensajes PUBLISH pueden enviarse desde un publicador al intermediario o desde el intermediario a un suscriptor. La acción del receptor cuando recibe un mensaje depende del nivel de QoS del mensaje:
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 del cliente que se ha suscrito a uno o más temas y que está a la espera de un mensaje del intermediario.