2

我试图在我的应用程序中使用 ActiveMQ 5.8.0 消息组,但在阅读文档后没有得到预期的结果。

我为特定队列启动两个(或更多)消费者,然后将消息发送到队列。在生产者的 createMessage 方法中,我使用的是:

message.setStringProperty("JMSXGroupID", "foo");

设置 GroupID。请注意,出于测试目的,我对“foo”进行了硬编码。它最终将是生产者设置的字符串。

由于我的消息中只设置了一个消息组,我希望看到一个消费者会变得活跃并消费队列中的所有消息,而另一个消费者将保持静止。

相反,我看到第一个消费者处理了第一条消息,然后在第一个消费者完成后,第二个消费者处理了第二条消息。消费者继续以这种方式轮流,直到所有的消息都被消费完。

这是预期的行为,还是我需要在 ActiveMQ 或我的生产者或消费者上进行一些额外的配置,以确保每个 GroupID 都与单个消费者相关联。

4

1 回答 1

2

AMQ 消息组只是保证单个消费者一次对给定的组(“foo”等)处于活动状态......它不会将该组绑定到特定的消费者,因此 AMQ 的内部消费者负载平衡可能只是在消费者之间交替。

无论如何,当您将动态 JMSXGroupID 值用于多个消费者等时,这应该不是问题。

于 2013-06-03T20:30:49.040 回答