Облегченная шина сообщений с возможностями вещания и маршрутизации?

Я пытаюсь найти самую легкую шину сообщений (очередь?), Которая может обрабатывать следующее:

  1. Производитель А подписывается на автобус. Шина указывается через хорошо известную форму идентификации (например, имя, сокет или что-то).
  2. Потребитель B подписывается на одну и ту же шину и регистрируется только на сообщения определенного типа.
  3. Потребитель C подписывается на ту же шину и регистрируется на сообщения другого типа, которые совпадают с сообщениями B.
  4. Производитель A помещает сообщение в шину, так что B и C заинтересованы. Оба B и C получают сообщение (не только один из них, но оба).

A, B, C и автобус находятся в разных машинах.

2 ответа

Вы, вероятно, лучше всего использовать очередь (например, ActiveMQ) для этого и для lightweight требование, вы можете использовать MQTT в качестве базового протокола, который очень легкий.

Смотрите: http://activemq.apache.org/mqtt.html

http://mqtt.org/

Для вашего сценария:

  1. Ваш продюсер А подключится к очереди

  2. Ваш потребитель B подключится к той же очереди и прослушает тему (например, /topic/onlyBisInterested). Он также подпишется на /topic/everyoneIsInterested

  3. Ваш потребитель C подключится к очереди и прослушивает /topic/everyoneIsInterested

    1. Ваш производитель опубликует сообщение для /topic/everyoneIsInterested и оба B и C получат это сообщение.

Вы можете много поиграть с темами. Вы можете иметь правила сопоставления тем на основе подстановочных знаков, на точной основе или любой их комбинации. Существуют также уровни иерархии (такие как /a/b/*), которые можно настроить, которые будут принимать (/a/b/c или / a / b / d или что-либо еще).

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

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

Мы написали одноранговую шину сообщений Zebus на основе ZeroMq (транспорт), Cassandra (одноранговое обнаружение и постоянство) и Protobuf (сериализация). Он поддерживает маршрутизацию сообщений на основе свойств сообщений.

Это открытый исходный код и тестирование производства https://github.com/Abc-Arbitrage/Zebus

Зебус активно развивается и активно использует свое производство. В настоящее время существует только привязка к языку.NET.

Другие вопросы по тегам