有没有办法用ActiveMQ实现一个拓扑,其中P是发布者,s_a是服务A的订阅者,s_b1和s_b2是服务B的订阅者。后者设置在集群中用于负载均衡(所以s_b1或s_b2收到一条消息,但不是两者都收到)。
是否有一种方法将发布-订阅与点对点消息传递相结合,以便其中一个订阅者将成为两个消费者正在侦听的队列?
是的,这是可以做到的。
您可能需要查看 Apache ActiveMQ Artemis,它实现了 JMS 2.0 并支持您开箱即用的要求。 JMS 2.0 允许每个主题有多个订阅者来平衡集群的负载。
对于 ActiveMQ 和 JMS 1.0,您可以使用 虚拟目标。他们使用命名约定。
如果您将主题命名为:
VirtualTopic.StockPrice
并向其发布消息,您将能够从名为 Consumer.Consumer1.VirtualTopic.StockPrice
、Consumer.Consumer2.VirtualTopic.StockPrice
等的队列中进行消费。Consumer1 可以是任何内容。
您可以重新配置 ActiveMQ 以使用其他名称作为虚拟目标(前缀、后缀等)。