ActiveMQ带消息选择器的竞争消费者队列消息饥饿问题咨询
ActiveMQ 5.15.13 单队列消息选择器消费阻塞问题
运行环境
- ActiveMQ 版本:
5.15.13
业务场景
采用单队列挂载多个消费者的部署架构,要求动态限制部分消费者仅处理特定类别的消息,不拆分独立队列。
基础消息选择器功能本身可正常生效:例如配置Consumer1 ignores Stocks规则后,Consumer1可正常处理所有invoices类消息,Consumer2可正常处理所有Stocks类消息。
故障现象
当队列中已经积压大量某一类型消息(例如stocks类)时,新投递另一类型消息(例如invoices类)后,本应匹配该新消息的Consumer1不会消费这条新消息,持续处于空闲状态,直到Consumer2把全部积压的Stocks消息处理完成才会拾取新消息。该问题非100%必现,但发生频率较高。
咨询诉求
是否存在可调整新入队消息分发逻辑的相关配置,能够让匹配对应选择器的空闲消费者及时拾取新入队的匹配消息?
已排查验证的无效方案
- 配置
PendingMessageLimitStrategy:经验证该策略对队列场景不生效; - 调大
maxPageSize、maxBrowsePageSize参数:期望将消息全部加载到内存后消费者可检索到匹配消息,实测未解决问题; - 启用
Exclusive Consumers(独占消费者):该方案不适用,业务要求支持同一消息类型被多个消费者并行处理。
补充说明
已确认存在适配当前使用场景的相关配置,也知晓该问题存在更优的架构改造方案,但受现有业务约束,暂时无法替换现有方案。
额外观测线索
刷新本地控制台的queue browser页面时,卡住的消息会立刻被消费。该操作似乎触发了队列的刷新逻辑,会重新按照选择器规则过滤匹配消息,期望找到新消息入队时自动触发该匹配刷新的配置方案。
内容的提问来源于stack exchange,提问作者Marc-Philipp Knechtle
相关产品推荐
相关产品推荐

