ActiveMQ利用selector消费在消息堆积量大的时候不起作用的解决

ActiveMQ利用selector消费在消息堆积量大的时候不起作用的解决

现象:

​ 我们在使用activemq queue的时候,发送方会把两个城市的消息都发到一个queue里,但是会在消息扩展属性里加上代表不同城市的参数,然后两个城市的应用都会启带不同selector的消费者到queue里消费各自的消息。前几天A市的服务挂了,开始B市的服务还能正常的消费消息,当随着queue里消息堆积的越来越多,B市开始消费不到消息了。

原因:

​ 经过查资料和翻源码了解到,ActiveMQ的内存分页体系结构,activemq把消息持久化到磁盘后,在空间可用时允许消息从从磁盘中以页为单位进入内存(对持久化消息使用存储游标),之后消息将会以页为单位,从一个挂起的游标(pending cursor)进入分发队列,而这样做的一个副作用就是,选择器只在内存中当前页的消息上进行评估过滤,所以但A市消息堆积占满的内存当前页后,B市服务就消费不到B市消息了。

解决办法:

​ 只能调大分页每页的大小,来延长其他选择过滤器保证消费者正常工作的时间。具体配置在服务端activemq.xml 里面的maxPageSize:

 <destinationPolicy&g
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值