我们正在使用ActiveMQ(5.14.5)。 我们在同一个队列中有一个生产者和多个消费者。 我们有时会将JMSXGroupID设置为将几条消息组合在一起,以便在单个消费者上使用。这按预期工作。 同时,生产者继续发送未分组的消息(即没有JMSXGroupID)
问题: 我们注意到,一旦选择了消费者来处理特定组,它就不再获得未分组的消息。即使它完全闲置。未分组的消息始终发送给其他消费者。 只有在我们关闭分配给它的组后,流氓消费者才会返回使用非分组消息(通过设置JMSXGroupSeq = -1)。
这是正常行为吗?我们预计未分组的消息将继续以与往常相同的循环方式传递给所有消费者。 我们无法在ActiveMQ文档中找到对此的明确引用。
答案 0 :(得分:0)
这里的消息经纪人有一些不赢的情况。如果正在播放活动消息组,则代理必须假定将生成属于这些组的其他消息。因此,已绑定到特定组的消息使用者需要保持对该组的消费者以后的消息可用,而不是未分组的消息。毕竟,未分组的消息可以在其他地方处理,而分组的消息则不能。
但是,我们还希望在消费者之间进行公平的消息分发。因此,绑定到一个组或一组的消费者在闲置时可以进行一些工作是有道理的。
但是我们怎么知道它是空闲的?如果消费者收到大量未分组的消息(并且不要忘记默认的预取行为),然后新消息到达与其特定组匹配的情况会怎样?
关闭群组会恢复"群组消费者"默认行为告诉我,这不是一个错误,而是故意在棘手的情况下做出合理的妥协。我要求添加一个功能似乎是合理的,其中"组消费者"可以参与未分组的工作量,但我倾向于将其视为一种增强功能。
当然是我的0.02美元。