Я сделал опыт с брокером Москито:
1: подписчик подписывается на тему с Qos 2 и не отвечает Publish Received
после получения сообщения;
2: Издатель публикует сообщение с Qos 2;
Я считаю, что брокер завершает рукопожатие Qos 2 с Publisher, даже если подписчик не указал, что он получил (Publish Received
), это означает, что брокер станет прокси-сервером и будет гарантировать, что подписчик получит сообщение хотя бы один раз и только один раз.
Я запутался, что при каких обстоятельствах Абонент не сможет получить сообщение?
Единственное обстоятельство, о котором я могу думать, это то, что подписчик занят и не читает пакет вовремя, пока он не сломается. Таким образом, если подписчик повторно подключится с CleanSession, установленным в 0, брокер повторно отправит сообщение. Это означает, что Qos 1 или 2 работает только с CleanSession, установленным в режим 0.
Я действительно хочу знать, почему повторная доставка и потеря сообщения могут происходить по протоколу MQTT на основе TCP.