Можно ли использовать MQTT (например, Mosquitto), чтобы опубликованная тема была выбрана одним и только одним из подписчиков? - PullRequest
0 голосов
/ 10 июля 2019

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

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

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

На мой взгляд, продюсер опубликует задание с темой "TASK_FOR_USER_A", и на эту тему подписано X рабочих.Затем брокер MQTT определит, что это задание, и выборочно отправит его одному из работников.

Можно ли это сделать или это выходит за рамки брокеров MQTT, таких как Mosquitto?

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

MQTT v5 имеет дополнительное расширение, называемое Shared Subscription, которое будет доставлять сообщения группе подписчиков в режиме циклического перебора. Таким образом, каждое сообщение будет доставлено только одной группе.

В Mosquitto v1.6.x реализован MQTT v5 и возможность совместной подписки.

Непонятно, что вы подразумеваете под 1 сообщением за раз. Сообщения будут доставляться по мере их поступления, и брокер не будет ждать, пока один подписчик завершит работу над сообщением, прежде чем доставить следующее сообщение следующему подписчику в группе.

Если у вас достаточно низкий контроль над клиентом, вы можете запретить ответы с высоким QOS, чтобы клиент не смог подтвердить сообщение и заставить посредника разрешить отправку только одного сообщения за один раз, что эффективно ограничило бы доставку сообщений. , но вы должны делать это только в том случае, если обработка сообщения выполняется очень быстро, чтобы предотвратить принятие брокером решения о сбое доставки и попытке доставить сообщение другому клиенту в общей группе.

Обычно брокер не выполняет никакой маршрутизации сверх той, которая основана на теме. Как указано в комментарии к этому ответу, Flespi реализовал «липкие сеансы», так что сообщения от определенного издателя будут доставляться тому же клиенту в общем пуле подписок, но это пользовательское добавление. а не часть спецификации.

0 голосов
/ 10 июля 2019

То, что вы ищете, - это брокер сообщений для сценария производитель / потребитель. MQTT - это легкий протокол обмена сообщениями, основанный на модели pub / sub. Если вы начнете использовать для этого какого-либо брокера MQTT, у вас могут возникнуть проблемы в зависимости от вашего варианта использования. Несколько вопросов к списку:

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

  2. Клиент получает сообщение, но не может его обработать, и брокер MQTT уже подтвердил доставку сообщения. В этом случае потребителю необходимо специально обработать повторную обработку сообщений с ошибками.

  3. Если вы идете по одной теме с несколькими подписчиками, у вашего потребителя должна быть идемпотентность.

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

0 голосов
/ 10 июля 2019

Насколько я знаю, MQTT не предназначен для этой цели. У него нет внутренней работы по распределению задач по работникам (потребителям). С другой стороны, AMQP можно использовать здесь. Один из способов взлома состоит в том, чтобы заставить рабочих принимать только определенный тип задач, но для этого также необходимо, чтобы производители также отправляли тип задач. В этом случае вы также не сможете масштабировать.

Лучше, если вы исследуете другие протоколы для этого типа использования.

...