Skip to content

mqtt confiabilidade

mobius1qwe edited this page Oct 27, 2026 · 1 revision

Home > MQTT > Rede ruim

Rede ruim: o que cada QoS garante

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Nível: intermediário

Em uma frase: escolha o QoS pelo que custa perder ou repetir uma mensagem; o cliente e o broker do RAL cumprem a promessa mesmo com a conexão caindo no meio.

QoS promete custa
0 no máximo uma vez: pode perder nada
1 pelo menos uma vez: pode repetir uma confirmação
2 exatamente uma vez duas idas e voltas

Para a promessa valer além de uma conexão:

  • CleanStart False e SessionExpiry maior que o tempo que você pode ficar fora;
  • SessionStore em arquivo (mskFile) dos dois lados, se o programa pode ser fechado no meio: o cliente guarda o que mandou e não foi confirmado, o broker do RAL guarda filas e retidas num diário;
  • AckMode amAfterHandler (padrão): o cliente só confirma depois do seu OnMessage, então um programa que morre no tratador recebe de novo.

Quando a rede cai o tempo todo

O cliente e o broker do RAL começam cada conexão mandando pouco e aumentam, e depois de conexões que duraram pouco começam menores. Num enlace que corta a conexão depois de poucas centenas de bytes isso evita entregar as mesmas mensagens sem fim.

Com outros brokers, ponha ReceiveMaximum pequeno (10) no cliente que assina: o Mosquitto 2 reenvia, a cada reconexão, tudo o que já tinha em trânsito, além do limite que a nova conexão anuncia.

No MQTT-SN, cada pedido é reenviado a cada RetryInterval até RetryCount vezes; num rádio que perde muito, aumente os dois, no cliente e no gateway.

Erros comuns

sintoma causa
a mesma mensagem duas vezes com QoS 1 é a promessa do QoS 1
mensagens perdidas ao reiniciar SessionStore em memória, ou CleanStart True
a fila do broker some SessionExpiry 0, ou o broker com MaxSessionExpiry menor

Veja também

Clone this wiki locally