【问题标题】:ActiveMQ: consumer not getting non-grouped messages once it is selected to handle a specific message groupActiveMQ:一旦选择处理特定消息组,消费者就不会收到非分组消息
【发布时间】:2018-03-12 14:57:27
【问题描述】:

我们正在使用 ActiveMQ (5.14.5)。 我们有一个生产者,多个消费者在同一个队列中。 我们有时会设置 JMSXGroupID 来将多条消息组合在一起以供单个消费者使用。这按预期工作。 同时,生产者继续发送非分组消息(即没有 JMSXGroupID)

问题: 我们注意到,一旦选择了一个消费者来处理一个特定的组,它就不再获得未分组的消息。即使它完全闲置。未分组的消息总是发送给其他消费者。 只有在我们关闭分配给它的组(通过设置 JMSXGroupSeq=-1)后,流氓消费者才会返回使用非分组消息。

这是正常行为吗?我们预计非分组消息将继续以与往常相同的循环方式传递给所有消费者。 我们无法在 ActiveMQ 文档中找到对此的明确引用。

【问题讨论】:

    标签: java activemq


    【解决方案1】:

    对于消息代理来说,这里有点失败的局面。如果有活动的消息组在起作用,代理必须假设将产生更多属于这些组的消息。因此,已绑定到特定组的消息使用者需要保持对该组的消费者以后的消息可用,而不是未分组的消息。毕竟,未分组的消息可以在其他地方处理,而分组的消息则不能。

    但是,我们还希望在消费者之间公平分配消息。因此,绑定到一个或多个组的消费者可以在空闲时执行一些工作是有道理的。

    但是我们怎么知道它是空闲的呢?如果消费者收到一堆未分组的消息(并且不要忘记默认的预取行为),然后到达与其特定组匹配的新消息会怎样?

    关闭组将“组消费者”恢复为默认行为这一事实向我表明,这不是错误,而是在棘手的情况下故意做出合理妥协的尝试。对我来说,要求添加一项功能似乎是合理的,“组消费者”可以参与未分组的工作负载,但我倾向于将其视为一种增强功能。

    当然只是我的 0.02 美元。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 2021-03-06
      • 2016-05-04
      相关资源
      最近更新 更多