можно ли гарантировать доставку mqtt msg в упрощенном случае?

Если есть только один брокер, один издатель, одна тема и чистая сессия, в этом упрощенном случае

Можно ли гарантировать, что порядок доставки сообщений на стороне подписчика будет таким же, как порядок отправки на стороне издателя? Будет ли на это влиять QoS?


person Ye XIA    schedule 29.06.2016    source источник


Ответы (1)


Раздел 4.6 из MQTT 3.1.1 spec охватывает порядок сообщений:

4.6 Порядок сообщений

Клиент ДОЛЖЕН следовать этим правилам при реализации потоков протокола, определенных в других разделах этой главы:

  • Когда он повторно отправляет какие-либо пакеты PUBLISH, он ДОЛЖЕН повторно отправить их в том порядке, в котором были отправлены исходные пакеты PUBLISH (это относится к сообщениям QoS 1 и QoS 2) [MQTT-4.6.0-1]
  • Он ДОЛЖЕН отправлять пакеты PUBACK в том порядке, в котором были получены соответствующие пакеты PUBLISH (сообщения QoS 1) [MQTT-4.6.0-2].
  • Он ДОЛЖЕН отправлять пакеты PUBREC в том порядке, в котором были получены соответствующие пакеты PUBLISH (сообщения QoS 2) [MQTT-4.6.0-3] Он ДОЛЖЕН отправлять пакеты PUBREL в том порядке, в котором были получены соответствующие пакеты PUBREC (сообщения QoS 2). ) [MQTT-4.6.0-4]

Сервер ДОЛЖЕН по умолчанию рассматривать каждую тему как «Упорядоченную тему». Он МОЖЕТ предоставлять административный или иной механизм, позволяющий рассматривать одну или несколько тем как «неупорядоченную тему» ​​[MQTT-4.6.0-5].

Когда Сервер обрабатывает сообщение, которое было опубликовано в Упорядоченной теме, он ДОЛЖЕН следовать перечисленным выше правилам при доставке сообщений каждому из своих подписчиков. Кроме того, он ДОЛЖЕН отправлять пакеты PUBLISH потребителям (для той же темы и QoS) в том порядке, в котором они были получены от любого данного клиента [MQTT-4.6.0-6].

Прочитав это, я пришел бы к выводу, что сообщения обычно (если брокер специально не настроен на использование неупорядоченных тем) отправляются по порядку, но если сообщение с высоким QOS не подтверждено должным образом, оно может быть повторно отправлено, что может привести к его повторной доставке вне последовательности. .

person hardillb    schedule 29.06.2016
comment
Большое спасибо за ваш ответ, Просто небольшой комментарий, я бы предпочел QOS 1, чем сообщение с высоким QOS. - person Ye XIA; 29.06.2016
comment
High QOS — это, по сути, все, что угодно, кроме 0 - person hardillb; 29.06.2016
comment
Да, но сообщение QOS 2 не будет доставлено повторно. - person Ye XIA; 29.06.2016
comment
Брокер попытается повторно доставить сообщение QOS 2, если оно не было подтверждено, поэтому возможно, что оно будет доставлено правильно позже, чем правильно подтвержденное сообщение, которое было опубликовано позже. - person hardillb; 29.06.2016