Uma mensagem PUBLISH é enviada por um cliente a um intermediário para distribuição para assinantes interessados. Cada mensagem PUBLISH está associada a um nome de tópico (também conhecido como o Assunto ou Canal). Esse é um espaço de nomes hierárquico que define uma taxonomia de fontes de informações para as quais os assinantes podem registrar um interesse. Uma mensagem que é publicada em um nome de tópico específico é entregue para assinantes conectados para esse tópico.
Para manter a simetria, se um cliente fizer assinatura em um ou mais tópicos, várias mensagens publicadas para esses tópicos serão enviadas pelo intermediário para o cliente como uma mensagem PUBLISH.
A tabela abaixo mostra o formato do cabeçalho fixo.
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
byte 1 | Tipo de Mensagem (3) | Sinalizador DUP | Nível de QoS | RETAIN | ||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | |
byte 2 | Comprimento Restante |
Para mensagens com nível de QoS 1 ou 2 que estão sendo reenviadas porque foi detectado um defeito, o bit DUP está definido como 1. Isto indica ao intermediário que a mensagem pode duplicar uma mensagem que já tenha sido recebida. A importância dessas informações para o intermediário depende do nível de QoS. O bit DUP não é utilizado para mensagens com nível de QoS 0.
O cabeçalho da variável contém os seguintes campos:
Geralmente, a biblioteca de protocolos é responsável pela geração do ID da Mensagem e pelo retorno ao aplicativo de publicação, provavelmente como um identificador de retorno. Essa abordagem evita o risco de vários aplicativos, ou da publicação de encadeamentos, em execução em um único cliente que gera IDs da Mensagem duplicados.
Um ID da Mensagem não deve ser utilizado no cabeçalho variável para mensagens com nível de QoS 0.
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. A ordenação dos 2 bytes do Identificador de Mensagens é MSB, em seguida, LSB (big-endian).
O ID da Mensagem 0 (ou seja, 0x0000) está reservado como um ID da Mensagem inválido, e não deve ser utilizado.
A tabela abaixo mostra um cabeçalho variável de exemplo para uma mensagem PUBLISH.
Campo | Value |
---|---|
Nome do Tópico: | "a/b" |
Nível de QoS | 1 |
ID da Mensagem: | 10 |
O formato do cabeçalho variável nesse caso é 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 |
Identificador de Mensagens | |||||||||
byte 6 | ID da Mensagem MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
byte 7 | ID da Mensagem LSB (10) | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
Contém os dados para publicação. O conteúdo e formato dos dados são específicos do aplicativo. O campo Comprimento Restante no cabeçalho fixo inclui o comprimento do cabeçalho variável e o comprimento da carga útil.
A resposta a uma mensagem PUBLISH depende do nível de QoS. A tabela abaixo mostra as respostas esperadas.
Nível de QoS | Resposta Esperada |
---|---|
QoS 0 | Nenhum(a) |
QoS 1 | PUBACK |
QoS 2 | PUBREC |
As mensagens PUBLISH podem ser enviadas de um editor para o intermediário, ou do intermediário para um assinante. A ação do destinatário quando ele recebe uma mensagem depende do nível de QoS da mensagem:
Se o intermediário receber a mensagem, as partes interessadas indicam assinantes do tópico da mensagem PUBLISH. No caso de um assinante receber a mensagem, partes interessadas indicam o aplicativo no cliente que fez assinatura em um ou mais tópicos e está aguardando uma mensagem do intermediário.