С брокером Mosquitto, как подписаться на тему и получить любое сообщение только один раз

Я уверен, что это вопрос новичка, но как с помощью Mosquitto подписаться на сохраненное сообщение и гарантировать, что я получу сообщение только один раз? У меня есть подписчик Java на основе Paho, и при тестировании я замечаю, что если мой подписчик отключен, а затем перезапущен, он извлекает некоторые из тех же сообщений, которые он получил до того, как он упал. (Обычно оно оставалось бы навсегда, но всякое случается.) И очень важно, чтобы подписчик получал каждое сообщение только один раз. (Для моего варианта использования есть только 1 подписчик.)

Есть ли что-то встроенное в Mosquitto, обеспечивающее этот механизм, или это то, что мне нужно встроить в мою схему данных и процесс поиска?

Я вижу, что есть способ удалить сообщение по теме (https://lists.launchpad.net/mosquitto-users/msg00067.html), но сейчас мои темы довольно общие [Компания]/[MAC-адрес]/[Тема x], и в очереди могут быть два отдельных сообщения с одной и той же темой. , и я предполагаю, что если я отправлю пустое сообщение в данную тему, я в конечном итоге удалю все сообщения указанной темы.

Заранее спасибо за любую помощь в этом.


person JohnL    schedule 01.03.2016    source источник


Ответы (1)


установите уровень QoS на 2.

QoS-level-2: однократная доставка. Это самый высокий уровень, который также влечет за собой наибольшую нагрузку на контрольные сообщения и необходимость локального хранения сообщений. Exactly-once — это комбинация гарантии доставки хотя бы один раз и максимум один раз.

person Noor    schedule 09.03.2016