При публикации сообщения с помощью mqtt QoS 2 можно ли его потерять? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь реализовать клиент MQTT, используя MQTT-Client Framework .Я хочу заверить, что каждое сообщение, которое я пытаюсь опубликовать, достигает брокера.Я не могу точно понять, что означает QOS2: в нем говорится, что сообщение будет отправлено ровно один раз.Означает ли это, что при потере соединения он попытается автоматически повторно передать сообщение после повторного подключения?Или это должно быть обработано приложением?

Также в этой библиотеке переподключение выполняется по умолчанию автоматически?Или необходимо проверить, произошло ли потерянное соединение, а затем попытаться восстановить соединение?

1 Ответ

0 голосов
/ 29 ноября 2018

Уровни MQTT QoS являются гарантией доставки сообщений получателю, а не частотой отправки / повторной отправки сообщения отправителем.См. Раздел QoS в спецификации MQTT и обзор MQTT QoS .

Сообщение, опубликованное с помощью MQTT QoS2, означает, что оно будет доставлено ровно один раз.Сообщение может быть отправлено более одного раза, чтобы достичь этой гарантии доставки.

По меньшей мере, один раз аспект доставки для MQTT достигается с помощью рукопожатия PUBLISH / PUBREC.Издатель продолжит повторную отправку сообщения PUBLISH с установленным флагом DUP, если он не получит пакет PUBREC, который подтверждает его опубликованное сообщение (я).

Ровно один раз аспект доставки для QoS2 достигается с помощью добавления PUBREL.PUBCOMP рукопожатие.Получатель может выбрать пересылку сообщения и отбросить повторяющиеся сообщения в двух разных точках .

Означает ли это, что при потере соединения он попытается повторно передать сообщение автоматически послепереподключения?Или это должно быть обработано приложением?

Спецификация MQTT охватывает повторных попыток доставки сообщений :

Когда клиент повторно соединяется с CleanSession, установленным в 0и клиент, и сервер ДОЛЖНЫ повторно отправлять любые неподтвержденные пакеты PUBLISH (где QoS> 0) и пакеты PUBREL, используя свои оригинальные идентификаторы пакетов.Это единственное обстоятельство, когда клиент или сервер ТРЕБУЕТСЯ для пересылки сообщений.

Поэтому, если ваш клиент следует спецификации и вы используете постоянный сеанс (CleanSession = 0), сообщения будут повторно переданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...