ActiveMQ 消息组是跨多个消费者进行负载平衡的绝佳功能。简而言之:根据嵌入在消息中的组标识符(JMSXGroupID
),消息流被划分为单个队列的多个消费者。(因此,消费者 1 将获得所有带有 的消息JMSXGroupID = a
,消费者 2 将获得带有 的所有消息JMSXGroupID = b
,依此类推。)
现在,假设您有 2 个队列:A
和B
,并假设JMSXGroupID
在流经两个队列的消息中使用了一致的 s 分类法。代理在队列中选择的消费者是否会是代理JMSXGroupID = ABC
在队列中选择A
的同一连接中的消费者?JMSXGroupID = ABC
B
我怀疑这个问题的答案是“不”。有太多变量在起作用:如果代理选择的消费者A
没有对应的消费者会发生什么B
?如果代理选择的消费者A
有多个对应的消费者,会发生B
什么?在这些情况下,没有明显的正确答案。
但是,我们可以模拟这种行为吗?例如,复合目的地上的消费者可能是一个可行的解决方案——确保所有消费者都在复合目的地上A
并B
在复合目的地上消费,A,B
并且您可能正在开展业务——但 ActiveMQ 似乎不支持从复合目的地消费。
我发现的唯一解决方案是简单地将消息推送到一个队列上——称之为——A
并在其上拥有一个独占消费者。您现在必须区分“ messages”和“ messages”,但您可以使用标题轻松做到这一点。B
AB
A
B
然而,这个解决方案闻起来很有趣。(您现在必须假设生产者会尽职尽责地将特殊标头应用于他们的消息,或修改您的有效负载。)是否有一种解决方案可以确保消费者跨越两个单独的队列A
并B
始终位于同一个连接上?