Отображение пропущенных сообщений от издателя с новым абонентским подключением (MQTT / Mosquitto) - PullRequest
0 голосов
/ 09 февраля 2019

Publusher отправляет сообщение -m "hello" в тему -t hello с помощью команды mosquitto_pub -h 172.17.*.* -t hello -m "hello" -d.Подписчик видит сообщение -m "hello" только при активном подключении к теме -t hello.Однако если подписчик не подписан на тему -t hello и издатель по-прежнему отправляет сообщения на тему -t hello, то при попытке подписки на эту тему mosquitto_sub -h 172.17. *. * -t hello подписчик не получает отправленные сообщения от издателя.

Прочитав документацию, разбив пару брокеров, я добился только того, что вы можете увидеть последнее сообщение, если вы поставите флаг на издателе -r вот так - -mosquitto_pub -h 172.17. *. * -r -t hello -m "hello".Я настроил mosquitto.conf, потому что я думал, что основные изменения, являющиеся примером текущей проблемы, могут быть достигнуты только через него.

Как я могу решить такую ​​проблему, я хотел бы увидетьвсе пропущенные сообщения от издателя при повторной подписке на тему?

1 Ответ

0 голосов
/ 09 февраля 2019

Вам необходимо использовать значения QOS (качество обслуживания) для сообщений.По умолчанию QOS установлен на 0, что в основном является срабатыванием и забудьте, QOS 1 - это гарантированная доставка (но может означать, что доставлено более одного раза).QOS 2 гарантированно доставляется только один раз.

Необходимо указать, что QOS находится между 1 клиентом и брокером, поэтому это может быть между издателем и брокером или брокером и подписчиком независимо.(например, вы можете опубликовать в QOS 0, а затем подписаться на тему в QOS 2).

Для очереди сообщений для автономных клиентов клиент должен быть подписан в QOS 1 или QOS 2 и при его повторном подключенииему нужно установить флаг cleanSession на false и использовать тот же идентификатор клиента.

Брокеры MQTT не будут помещать в очередь сообщения для клиентов, которые никогда ранее не подключались.

С mosquitto_sub и mosquitto_pub вы можете установить уровень QOS с помощью опции -q, а также установить идентификатор клиента с помощью опции -i.Чтобы установить для флага чистой сессии значение false для mosquitto_sub, вы должны использовать опцию -c

...