我正在尝试找到可以处理以下内容的最轻量级的消息总线(队列?):
- 生产者 A 订阅总线。总线是通过众所周知的标识形式(如名称、套接字或其他东西)指定的。
- 消费者 B 订阅相同的总线并仅注册某种类型的消息。
- 消费者 C 订阅了同一条总线,并注册了另一种与 B 重叠的消息。
- 生产者 A 将一条消息放入总线,使 B 和 C 都感兴趣。B 和 C 都接收到消息(不仅仅是其中一个,而是两个)。
A、B、C 和总线位于不同的机器中。
我正在尝试找到可以处理以下内容的最轻量级的消息总线(队列?):
A、B、C 和总线位于不同的机器中。
您可能最好为此使用队列(例如 ActiveMQ),并且对于lightweight
要求,您可以使用 MQTT 作为非常轻量级的底层协议。
见: http ://activemq.apache.org/mqtt.html
对于您的场景:
您的生产者 A 将连接到队列
您的消费者 B 将连接到同一个队列并监听一个主题(例如/topic/onlyBisInterested
)。它还将订阅/topic/everyoneIsInterested
您的消费者 C 将连接到队列并收听/topic/everyoneIsInterested
/topic/everyoneIsInterested
B 和 C 都将收到此消息。你可以玩很多主题。您可以拥有基于通配符、精确或任意组合的主题匹配规则。还可以设置可以接受(/a/b/c 或 /a/b/d 或其他任何内容)的层次结构级别(例如 /a/b/*)。
如果需要,您还可以通过 SSL 传输数据并使用身份验证,并在您的一个/多个节点出现故障时使用消息持久性和保证交付。
我建议阅读官方文档并确定它是否适合您。还有许多其他免费或商业队列可用,由于它们非常标准,因此大多数/全部都将满足您的要求。
我们基于 ZeroMq(传输)、Cassandra(对等发现和持久性)和 Protobuf(序列化)编写了对等消息总线 Zebus。它支持基于消息属性的消息路由。
它是开源和生产测试的https://github.com/Abc-Arbitrage/Zebus
Zebus 正在积极开发中,并在大量内部生产中使用。目前只有 .NET 语言绑定。