Mosquitto стреляет только по одному на каждую тему

Я реализовал брокер сообщений MQTT, используя mosquitto в своей сети. У меня есть одно веб-приложение, публикующее материалы для брокера, и несколько серверов, которые подписались на ту же тему. Итак, у меня есть сценарий избыточности.

Мой вопрос: используя только mosquitto, есть ли способ настроить его для публикации данных только о первом подписчике? В противном случае все они будут делать одно и то же.


person Diogo Aleixo    schedule 12.05.2018    source источник


Ответы (2)


Я не думаю, что это возможно.

Но вы можете это сделать.

Попросите первую программу-подписчик ответить подтверждением на канале, как только она получит сообщение, и пусть программа резервирования будет искать подтверждение в течение небольшого времени после первоначального сообщения.

ЕСЛИ подтверждение получено, избыточность не должна ничего делать.

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

person Nitro    schedule 12.05.2018
comment
Привет. Большое тебе спасибо. Я думал об этом грязном пути. Вы использовали этот способ раньше? - person Diogo Aleixo; 12.05.2018
comment
Да. Я поместил канал подтверждения в подкаталог темы. И поскольку клиент MQTT дает вам абсолютный путь, по которому был опубликован запрос, я мог различать издателя и первого подписчика. - person Nitro; 12.05.2018
comment
Большое тебе спасибо. Знаете ли вы какое-нибудь хорошее чтение, которое можно было бы реализовать? - person Diogo Aleixo; 12.05.2018
comment
Не знаю. Извините. Но это обходное решение не так уж сложно реализовать. Все, что вы делаете, это передаете уровень подтверждения в качестве аргумента в свой код и получаете обратный вызов для полученного сообщения, проверяйте правильный уровень подтверждения с правильной величиной задержки. Я хотел бы поделиться кодом, который я написал, но у меня больше нет к нему доступа. - person Nitro; 13.05.2018

Нет, в настоящее время это невозможно с Mosquitto (без связи между двумя абонентами, как описано в другом ответе).

В новом выпуске спецификации MQTT (v5) * есть новый режим под названием «Общие подписки». Это позволяет нескольким клиентам подписаться на одну тему, и сообщения будут доставляться каждому клиенту циклически. Это больше для балансировки нагрузки, чем для отработки отказа ведущий / ведомый.

* Есть некоторые брокеры (HiveMQ, IBM MessageSight), которые уже поддерживают некоторую версию общих подписок в MQTT v3.1.1, но они реализуют ее немного по-другому (разные префиксы тем), поэтому они не являются перекрестно совместимыми.

person hardillb    schedule 12.05.2018
comment
Большое спасибо за ответ. Я буду работать над решением проблемы. - person Diogo Aleixo; 12.05.2018