Уровни 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), сообщения будут повторно переданы.