我尝试在我的应用程序中使用 ActiveMQ 5.8.0 消息组,但在阅读文档后没有得到我预期的结果。
我为特定队列启动两个(或更多)消费者,然后将消息发送到该队列。在生产者的 createMessage 方法中,我使用:
message.setStringProperty("JMSXGroupID", "foo");
设置GroupID。请注意,出于测试目的,我对“foo”进行了硬编码。它最终将是生产者设置的字符串。
由于我的消息中只设置了一个消息组,因此我希望看到一个消费者将变为事件状态并消费队列中的所有消息,而另一个消费者将保持静止状态。
相反,我看到第一个消费者处理第一条消息,然后在第一个消费者完成后第二条消息由第二个消费者处理。消费者继续以这种方式轮流,直到所有消息被消费。
这是预期的行为,还是我需要在 ActiveMQ 或我的生产者或消费者上进行一些额外的配置,以确保每个 GroupID 与单个消费者关联。
最佳答案
AMQ 消息组仅保证单个消费者一次对给定组(“foo”等)处于事件状态...它不会将该组绑定(bind)到特定消费者,因此 AMQ 的内部消费者负载平衡很可能只是在消费者之间交替。
无论如何,当您对多个使用者使用动态 JMSXGroupID 值等时,这不应该成为问题。
关于activemq - 如何在 ActiveMQ 中使用消息组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901994/