При рукопожатии из четырех частей (MQTT QoS уровень 2, передача ) последним подтверждающим сообщением является сообщение PUBCOMP
.
Следующие предположения сделаны:
- Сообщение
PUBCOMP
отправляется получателем после обработки полезной нагрузки сообщения и доставки его другим подписчикам. - Когда отправитель получает сообщения
PUBCOMP
, которые он считаетвся передача успешна и уведомляет вызывающего. - Используемые ресурсы очищаются, и идентификатор пакета теперь можно повторно использовать для дальнейших передач.
Но что, если PUBCOMP
никогда не принимается отправителем?
Отправитель продолжает некоторые попытки, отправив PUBREL
(посредством чего получатель должен ответить PUBCOMP
из-за спецификации MQTT).
Но что, если PUBCOMP
просто отказывается возвращаться к получателю (каким-либо образом)?
Считается ли передача обработанной , хотя PUBCOMP
это миssing ?
Как отправитель узнает, что передача гарантированно обработана?С точки зрения отправителя это также может означать, что его собственный PUBCOMP
никогда не достигал получателя (что может означать, что передача не была обработана) ...
Это оставляет отправителя в неизвестном состоянии.Или нет?