Есть ли способ сохранить уровень MQTT QoS, пока он не достигнет клиента?

9

MQTT позволяет отправителям устанавливать уровень качества обслуживания (QoS), который обеспечивает определенные гарантии относительно того, будет ли получено сообщение (и разрешены ли дубликаты). В этой статье HiveMQ освещается проблема понижения версии , когда клиент с более низким уровнем QoS не получит сообщение с гарантиями, которые отправитель запросил:

Как уже говорилось, потоки QoS между клиентом публикации и подпиской - это две разные вещи, а также QoS могут быть разными. Это означает, что уровень QoS может отличаться от клиента A, который публикует сообщение, и клиента B, который получает опубликованное сообщение. QoS между отправителем и брокером определяется отправителем. Когда брокер рассылает сообщение всем подписчикам, используется QoS подписки от клиента B.

Предоставляет ли MQTT способ указания того, что это понижение не приемлемо и что сообщение должно быть доставлено с использованием запрошенного QoS исходного отправителя? Является ли единственной возможностью убедиться, что отправитель и получатель имеют желаемую настройку QoS перед передачей сообщения?

Аврора0001
источник

Ответы:

8

При работе с MQTT следует помнить, что «и подписчики, и издатели считаются клиентами MQTT».

Как уже говорилось, набор QoS при публикации полностью связан с брокером (B), а не с другими клиентами. Таким образом, чтобы гарантировать, что подписчик (S) получает все, что публикует (P), необходимо использовать QoS 1.

Давайте посмотрим на случаи: P - отправляет с QoS 0, что означает, что каждое сообщение будет в B максимум один раз (один раз или ноль). В этом случае, если S подписывается на B с QoS 0 - нет гарантии, что даже когда брокер (B) получит сообщение, которое в конечном итоге достигнет S. QoS 1 - S определенно получит QoS 2 - S не получит несколько сообщений, в то время как брокер может

Если мы сделаем то же самое с другим QoS. Мы узнаем, что QoS1 для абонентов хорошо работает со всеми уровнями, поскольку QoS 1 является надмножеством всех.


MQTT не предоставляет никаких указаний на то же самое, но мы можем достичь QoS отправителя, используя QoS 1 при подписке.

bravokeyl
источник
4

Уровни QoS 1 или 2 гарантируют, что опубликованное сообщение поступило к брокеру. Абонент QoS 1 или 2 уверяет брокера, что сообщение было получено.

Публикация с 1 или 2 не означает, что кто-то слушает.

Какой у вас вариант использования?

fixitchris
источник
3
Не задавайте вопросы в ответах. Если что-то не понятно, сначала оставьте комментарий.
Бенс Кауликс
Мне любопытно, чтобы в любой ситуации сенсор отправлял данные брокеру сообщений, а затем передавал их на компьютер или другой процессор, где важно сохранить гарантии QoS.
Аврора0001