Paho Java - сохранение файлов

Я недавно начал с paho mqtt для java и с mqtt вообще, и я застрял с механизмом постоянства, предоставляемым брокером mqtt и самим клиентом paho. Возможно, я неправильно понял (возможно, это так) концепцию персистентности в контексте mqtt.

Пример использования, который мы должны поддерживать, следующий: вполне возможно, что наш клиент mqtt был отключен на 7 дней (что, я очень сомневаюсь, когда-либо произойдет, но нормально), и даже приложение будет закрыто без восстановить соединение в течение этих 7 дней, и после того, как оно будет запущено, отправить все сообщения за все 7 дней, пока оно было отключено.

Клиент Paho поддерживает сохранение буферизованных сообщений, пока он или брокер были отключены, и после восстановления сети или запуска брокера буферизованные сообщения отправляются, но невозможно отправлять буферизованные сообщения, если приложение закрывается, когда клиент был отключен или брокер был недоступен.

В основном мой вопрос - возможно ли, что сообщения с отключенной буферизацией переживут отключение клиента paho и начнутся снова?


person BojanSM    schedule 09.03.2017    source источник


Ответы (3)


В спецификации об этом ничего не говорится, только оговаривается:

Сохраненное сообщение - это обычное сообщение MQTT с установленным флагом сохранения значение true. Посредник сохранит последнее сохраненное сообщение и соответствующее QoS для этой темы. Каждый клиент, который подписывается на шаблон темы, который соответствует теме сохраненного сообщения, получит сообщение сразу после подписки. Для каждой темы брокером будет сохранено только одно сохраненное сообщение.

Как видите, ваши клиенты получат только последнее опубликованное сообщение по этой теме ...

все остальное за этим вернулось навсегда!

person ΦXocę 웃 Пepeúpa ツ    schedule 09.03.2017
comment
Сохраненные сообщения отличаются от сообщений в очереди и постоянства в клиенте. - person hardillb; 09.03.2017

Предполагая, что вы используете модуль MqttDefaultFilePersistence, а не модуль MemoryPersistence, клиент должен ставить сообщения в очередь, когда он не может связаться с брокером, и эти сообщения в очереди должны также пережить перезапуск клиента.

Автономная буферизация - относительно новая функция, но она должна быть во всех текущих сборках.

person hardillb    schedule 09.03.2017
comment
Да, я использую MqttDefaultFilePersistence. Случай, когда я останавливаю брокера и запускаю его снова, работает нормально - сообщения в очереди отправляются брокеру, когда он снова работает. Но случай, когда ((клиент отключен или брокер не работает) и клиент paho перезапускается) не работают. В основном мне нужны автономные буферизованные сообщения, чтобы пережить перезапуск клиента и быть отправленными после повторного подключения клиента. Попробую еще раз перепроверить, может что-то упустил. - person BojanSM; 09.03.2017
comment
Вы устанавливаете чистую сессию на true? Вероятно, это должно быть ложью, чтобы это сработало - person hardillb; 09.03.2017
comment
Нет, чистая сессия - это, конечно, ложь, но я проверю это завтра еще раз, когда доберусь до работы. Сообщу вам о результатах. Спасибо за ваши усилия. - person BojanSM; 09.03.2017
comment
Мне не удалось заставить это работать. Вполне возможно, что мне не хватает некоторых концепций mqtt или я делаю что-то не так. Шаги, которые я сделал, чтобы заставить это работать: 1) Клиент подключился и успешно опубликовал сообщения каждые 5 секунд, и они были успешно отправлены брокеру 2) Остановить брокера и подождать 30 секунд или около того 4) Завершить работу приложения 5) Запуск брокера 6) Запускаем приложение и клиент по нему, сообщения отправляются, но не те, которые были созданы, когда брокер не работал. (Я устанавливаю метку времени для полезной нагрузки.) - person BojanSM; 12.03.2017

установка идентификатора клиента и чистого сеанса на false сохранит все сообщения у брокера, пока клиент отключен.

установите MaxInflight для постановки сообщений в очередь на стороне клиента, пока брокер не работает.

person Java dev    schedule 31.05.2018