轻量级消息总线具有广播和路由功能?

时间:2015-01-21 18:05:00

标签: message-queue event-driven-design mom message-bus event-queue

我正在尝试找到能够处理以下内容的最轻量级消息总线(队列?):

  1. 制作人A订阅公交车。总线通过众所周知的标识形式(如名称,插座或其他东西)指定。
  2. 消费者B订阅同一总线并仅注册某种消息。
  3. 消费者C订阅同一总线并注册另一种与B重叠的消息。
  4. 制作人A在总线上放置一条消息,使B和C都感兴趣.B和C都接收消息(不只是其中一个,而是两个)。
  5. A,B,C和公共汽车都在不同的机器上。

2 个答案:

答案 0 :(得分:1)

您可能最好使用队列(例如ActiveMQ)来实现此目的,并且对于lightweight要求,您可以使用MQTT作为极其轻量级的基础协议。

请参阅: http://activemq.apache.org/mqtt.html

http://mqtt.org/

针对您的情况:

  1. 您的制作人A将连接到队列

  2. 您的消费者B将连接到同一个队列并侦听某个主题(例如/topic/onlyBisInterested)。它还会订阅/topic/everyoneIsInterested

  3. 您的消费者C将连接到队列并收听/topic/everyoneIsInterested

    1. 您的制作人将向/topic/everyoneIsInterested发布消息,B和C都会收到此消息。
  4. 你可以玩很多话题。您可以基于通配符,精确基础或其任何组合来拥有主题匹配规则。还有一些层次结构(例如/ a / b / *)可以设置接受(/ a / b / c或/ a / b / d或其他任何东西)。

    您还可以通过SSL传输数据并在需要时使用身份验证,并使用消息持久性和保证传递,以防一个/多个节点出现故障。

    我建议您阅读官方文档并确定它是否适合您。还有许多其他免费或商业队列,大多数/所有队列都能满足您的要求,因为它们非常标准。

答案 1 :(得分:0)

我们编写了一个基于ZeroMq(传输),Cassandra(对等发现和持久性)和Protobuf(序列化)的点对点消息总线Zebus。它支持routing of messages based on properties of the messages

它是开源和生产测试https://github.com/Abc-Arbitrage/Zebus

Zebus正在积极开发中,并且在内部生产中使用很多。目前只有.NET语言绑定。