Можно ли гарантировать доставку заказа mqtt msg в упрощенном случае?
Если есть только один брокер, один издатель, одна тема и чистый сеанс, в этом упрощенном случае,
Можно ли гарантировать, что заказ на доставку сообщений на стороне подписчика будет таким же, как заказ на отправку на стороне издателя? Будет ли это зависеть от QoS?
1 ответ
Раздел 4.6 спецификации MQTT 3.1.1 охватывает порядок сообщений:
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 не подтверждено должным образом, оно может быть повторно отправлено, что может привести к его повторной доставке из последовательности.,