我正在尝试在我的应用程序中使用ActiveMQ 5.8.0消息组,并且在阅读文档后我没有得到我期望的结果。
我为特定队列启动了两个(或更多)消费者,然后我将消息发送到队列。在生产者的createMessage方法中,我使用:
message.setStringProperty("JMSXGroupID", "foo");
设置GroupID。请注意,出于测试目的,我很难编写“foo”。它最终将是由制作人设置的字符串。
由于我的消息中只设置了一个消息组,因此我希望看到一个消费者变为活动状态并消耗队列中的所有消息,而另一个消息将保持静止状态。
相反,我看到第一个消费者处理了第一个消息,然后第一个消费者完成后第二个消息处理第二个消息。消费者继续以这种方式轮流,直到所有消息被消费。
这是预期的行为,还是我需要在ActiveMQ或我的生产者或消费者身上做一些额外的配置,以确保每个GroupID都与一个消费者相关联。
答案 0 :(得分:2)
AMQ消息组只保证单个消费者一次对某个组(“foo”等)有效...它不会将该组绑定到特定的消费者,因此AMQ的内部消费者负载平衡可能只是在消费者之间交替。
无论如何,当您将动态JMSXGroupID值与多个使用者等一起使用时,这不应该是一个问题。