0

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

  1. 生产者 A 订阅总线。总线是通过众所周知的标识形式(如名称、套接字或其他东西)指定的。
  2. 消费者 B 订阅相同的总线并仅注册某种类型的消息。
  3. 消费者 C 订阅了同一条总线,并注册了另一种与 B 重叠的消息。
  4. 生产者 A 将一条消息放入总线,使 B 和 C 都感兴趣。B 和 C 都接收到消息(不仅仅是其中一个,而是两个)。

A、B、C 和总线位于不同的机器中。

4

2 回答 2

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/everyoneIsInterestedB 和 C 都将收到此消息。

你可以玩很多主题。您可以拥有基于通配符、精确或任意组合的主题匹配规则。还可以设置可以接受(/a/b/c 或 /a/b/d 或其他任何内容)的层次结构级别(例如 /a/b/*)。

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

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

于 2015-03-04T08:56:42.167 回答
0

我们基于 ZeroMq(传输)、Cassandra(对等发现和持久性)和 Protobuf(序列化)编写了对等消息总线 Zebus。它支持基于消息属性的消息路由

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

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

于 2016-05-13T07:40:10.050 回答