虚拟主题的ActiveMQ消息组

时间:2011-11-21 22:18:50

标签: activemq

我理解主题是向客户端广播消息。但是在ActiveMQ文档中,它描述了负载平衡:

  

解释消息组的另一种方法是它为消费者提供消息的粘性负载平衡;其中JMSXGroupID有点像HTTP会话ID或cookie值,消息代理就像HTTP负载均衡器一样。

这是我不明白的地方。

不是广播吗?

我想做的是以下内容: 如果生产者向A组发送消息,那么代理人会以某种方式控制流量,并且“物理上”消息不应该转到B组。

甚至可以使用Virtual Topic吗?

1 个答案:

答案 0 :(得分:3)

VirtualTopics为每个主题订阅者创建队列并将消息复制到每个主题,因此它将所有消息“广播”给所有订阅者。

ActiveMQ消息组为您提供给定消息组(不同的JMSXGroupID)的独占消费者线程。您无法控制哪个消费者选择每个组,同一个消费者线程可以处理多个组。

据我所知,如果在发送到VirtualTopic的消息上设置JMSXGroupID,它将到达每个订户的虚拟队列。但是,如果您有多个线程从这些队列处理(maxConcurrentConsumers> 1),那么它们将是每个消息组的单线程等。

总体而言,如果您希望某些订阅者只处理发送到某个主题的邮件子集,请使用message selectors向下选择此子集。