В чем проблема всегда использовать QoS 0 в сеансе MQTT? - PullRequest
2 голосов
/ 03 ноября 2019

Я разрабатывал всегда подключенный MQTT-клиент на встроенном устройстве со строгим ограничением ресурсов, используя библиотеку Paho C. Вот мои вопросы:

  1. Помимо сбоев посредника и клиента, есть ли другие причины, по которым сообщение QoS 0 не приходит в пункт назначения?

  2. Возможно ли в запросе на подписку, что брокер не принимает запрошенное QoS?

  3. При каких обстоятельствах сообщение QoS 1 может быть получено несколько раз?

1 Ответ

3 голосов
/ 03 ноября 2019

(1) Сообщение, доставленное в QOS0 через TCP / IP, гарантированно достигло только стека TCP удаленного компьютера, а не действующего приложения (будь то клиент MQTT или брокер MQTT).

Сообщения, отправленные с более высоким QOS, распознаются приложением, а не только стеком TCP / IP хост-компьютера, поэтому вы можете быть более уверены, что он действительно обработан.

(2) Некоторые брокеры могут поддерживать только QOS0 или QOS 0/1 (например, AWS IoT ) и, как упомянуто в doc , сообщение SUBACK включает предоставленный уровень QOS, который может не соответствовать тому, что было запрошено. Таким образом, даже если подписывающийся клиент

(3) Если клиент аварийно завершает работу, обработав сообщение, но перед отправкой PUBACK, то брокер может попытаться доставить сообщение еще раз, когда клиент повторно подключится.

...