Если у меня есть издатель, отправляющий сообщение моему MQTT-брокеру с QoS 1 (по крайней мере, один раз) и подписчик с QoS 2 (ровно один раз), может ли подписчик по-прежнему получать дубликаты сообщений?
Меня беспокоит то, что издатель может отправлять дубликаты сообщений брокеру (поскольку QoS 1 утверждает, что это возможно), а затем брокер будет рассматривать их все как разные сообщения и пересылать все подписчику. Так работают брокеры MQTT? Или они достаточно умны, чтобы понять, что все дубликаты сообщений, полученные от издателя, одинаковы, а затем просто переслать одно подписчику.
Уровень QoS находится между отдельными клиентами и брокером. Подписчики также запрашивают уровень QoS, и брокер предоставляет подписчику QoS максимум для подписки.
Спецификация MQTT для версии 3.1.1 описывает, как эти различные уровни QoS связаны для вашего примера в раздел 3.8.4:
The QoS of Payload Messages sent in response to a Subscription MUST be the minimum of the QoS of the originally published message and the maximum QoS granted by the Server.
Подписчику мог быть предоставлен максимум QoS 2, когда он подписывался на тему. Но исходный издатель использует QoS 1. Таким образом, подписчик может получать дубликаты сообщения, отправленного исходным издателем.