Existe uma maneira de preservar o nível de QoS do MQTT até atingir o cliente?


9

O MQTT permite que os remetentes definam um nível de Qualidade de serviço (QoS), que fornece certas garantias sobre se uma mensagem será recebida (e se duplicatas são permitidas). Este artigo do HiveMQ destaca o problema da desatualização , em que um cliente com um nível de QoS mais baixo não receberá a mensagem com as garantias que o remetente solicitou:

Como já foi dito, os fluxos de QoS entre um cliente de publicação e assinatura são duas coisas diferentes, assim como a QoS. Isso significa que o nível de QoS pode ser diferente do cliente A, que publica uma mensagem, e do cliente B, que recebe a mensagem publicada. Entre o remetente e o intermediário, a QoS é definida pelo remetente. Quando o broker envia a mensagem a todos os assinantes, a QoS da assinatura do cliente B é usada.

O MQTT fornece uma maneira de indicar que esse downgrade não é aceitável e que a mensagem deve ser entregue usando a QoS solicitada pelo remetente original? É a única opção para garantir que o remetente e o destinatário tenham a configuração de QoS desejada antes de transmitir a mensagem?

Respostas:


8

Uma coisa a lembrar ao trabalhar com o MQTT é que "assinantes e editores são considerados clientes do MQTT".

Como dito, o QoS definido durante a publicação está totalmente relacionado ao broker (B) e não aos outros clientes. Portanto, para garantir que o assinante (S) esteja recebendo tudo o que o editor (P) está publicando, é necessário usar a QoS 1.

Vejamos os casos: P - envia com QoS 0, o que significa que todas as mensagens estarão no máximo B uma vez (uma vez ou zero). Nesse caso, se S assinar B com QoS 0 - não há garantia de que, mesmo quando o broker (B) receber uma mensagem que finalmente alcançará S. A QoS 1 - S definitivamente receberá QoS 2 - S não receberá várias mensagens enquanto o broker pode

Se fizermos o mesmo com outras QoS. Conheceremos a QoS1 para assinantes funciona bem em todos os níveis, pois a QoS 1 é um superconjunto de todos.


O MQTT não fornece nenhuma indicação para o mesmo, mas podemos obter a QoS do remetente usando a QoS 1 durante a assinatura.


4

Os níveis de QoS 1 ou 2 garantem apenas que a mensagem publicada chegou ao broker. O assinante QoS 1 ou 2 assegura ao broker que a mensagem foi recebida.

A publicação com 1 ou 2 não significa que alguém esteja ouvindo.

Qual é o seu caso de uso?


3
Não faça perguntas nas respostas. Se algo não estiver claro, deixe um comentário primeiro.
Bence Kaulics

Estou curioso sobre qualquer situação em que você possa ter um sensor enviando dados para o intermediário de mensagens e depois ser encaminhado para um computador ou outro processador, onde é vital que as garantias de QoS sejam mantidas.
Aurora0001
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.