Сообщение Mosquitto QoS 1 не расходуется при новой подписке - PullRequest
0 голосов
/ 13 апреля 2020

Я уверен, что это вопрос, который, вероятно, обобщает мое (отсутствие) понимания MQTT, поэтому прошу прощения заранее.

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

Так, например, я хочу отправить следующее сообщение:

mosquitto_pub -t switch/sign/switch -m "ahoy world!" --qos 1 -d

Если у меня есть подписчик, уже подписанный на эту топи c, он получит сообщение (и этот бит работает хорошо). Но если я этого не сделаю, сообщение будет использовано, как только новый клиент подпишется на topi c (по крайней мере, так я понимаю QoS).

Насколько я понимаю, я должен немедленно получить подписаться как подпись:

mosquitto_sub -t switch/sign/switch --qos 1 -d

Однако, когда я подписываюсь, я не получаю никаких сообщений.

Буду признателен за помощь здесь.

Спасибо

1 Ответ

2 голосов
/ 13 апреля 2020

Нет, сообщения не ставятся в очередь для новых клиентов, независимо от того, в каком QOS вы публикуете их sh.

Сообщения с высоким QOS ставятся в очередь только для существующих клиентов, для которых постоянный сеанс зарегистрирован в брокере. Это клиент с фиксированным clientId, который повторно подключается с установленным в false значением флага очистки сеанса.

Команда mosquitto_sub будет генерировать случайный clientId fre sh каждый раз при запуске, поэтому она не будет повторно подключаться к существующий постоянный сеанс, проводимый брокером. Он также по умолчанию очищает сеанс true.

Если вы выполните следующее:

mosquitto_sub -c -i fixedClientId -t switch/sign/switch --qos 1  

Затем отключите этот клиент (ctrl- c) перед публикацией тестовых сообщений, а затем запустите * Снова введите команду 1011 *, и вы увидите, что посредник поставил в очередь все опубликованные сообщения в эту топи c для этого специфицированного c клиента.

Подробнее о очереди сообщений с высоким QOS и постоянных сеансах можно прочитать здесь

Другой вариант - опубликовать sh оставленное сообщение. Когда сообщения публикуются с установленным флагом true, брокер удерживает последние сохраненные данные на данном топи c и доставляет их, как только любой клиент подписывается на этот топи c. Это всего лишь одно сообщение, и оно заменяется каждый раз, когда устанавливается сообщение с оставшимся битом, принимаемое брокером для этого topi c. Вы можете узнать больше о сохраненных сообщениях здесь

...