Облегченная шина сообщений с возможностями вещания и маршрутизации?
Я пытаюсь найти самую легкую шину сообщений (очередь?), Которая может обрабатывать следующее:
- Производитель А подписывается на автобус. Шина указывается через хорошо известную форму идентификации (например, имя, сокет или что-то).
- Потребитель B подписывается на одну и ту же шину и регистрируется только на сообщения определенного типа.
- Потребитель C подписывается на ту же шину и регистрируется на сообщения другого типа, которые совпадают с сообщениями B.
- Производитель A помещает сообщение в шину, так что B и C заинтересованы. Оба B и C получают сообщение (не только один из них, но оба).
A, B, C и автобус находятся в разных машинах.
2 ответа
Вы, вероятно, лучше всего использовать очередь (например, ActiveMQ) для этого и для lightweight
требование, вы можете использовать MQTT в качестве базового протокола, который очень легкий.
Смотрите: http://activemq.apache.org/mqtt.html
Для вашего сценария:
Ваш продюсер А подключится к очереди
Ваш потребитель B подключится к той же очереди и прослушает тему (например,
/topic/onlyBisInterested
). Он также подпишется на/topic/everyoneIsInterested
Ваш потребитель C подключится к очереди и прослушивает
/topic/everyoneIsInterested
- Ваш производитель опубликует сообщение для
/topic/everyoneIsInterested
и оба B и C получат это сообщение.
- Ваш производитель опубликует сообщение для
Вы можете много поиграть с темами. Вы можете иметь правила сопоставления тем на основе подстановочных знаков, на точной основе или любой их комбинации. Существуют также уровни иерархии (такие как /a/b/*), которые можно настроить, которые будут принимать (/a/b/c или / a / b / d или что-либо еще).
Вы также можете передавать свои данные по SSL и использовать аутентификацию, если требуется, а также использовать постоянство сообщений и гарантированную доставку в случае отказа одного или нескольких ваших узлов.
Я рекомендую прочитать официальную документацию и решить, достаточно ли это для вас. Существует множество других бесплатных или коммерческих очередей, большинство / все из которых будут соответствовать вашим требованиям, поскольку они очень стандартны.
Мы написали одноранговую шину сообщений Zebus на основе ZeroMq (транспорт), Cassandra (одноранговое обнаружение и постоянство) и Protobuf (сериализация). Он поддерживает маршрутизацию сообщений на основе свойств сообщений.
Это открытый исходный код и тестирование производства https://github.com/Abc-Arbitrage/Zebus
Зебус активно развивается и активно использует свое производство. В настоящее время существует только привязка к языку.NET.