failover与ActiveMQ的jms.prefetchPolicy.queuePrefetch以及wireFormat.maxInactivityDura

项目使用到activeMQ,在使用过程中遇到一个问题,我使用多个线程去读取队列,每个线程使用一个queue的连接对象,这些连接对象都读取ActiveMQ中的同一个消息队列。但发现只有第一个队列可以循环读取,别的队列都读取到null,但使用activeMQ的控制台查看,队列里还有20多个消息呢,后来google才知道,原来为了性能优化,ActiveMQ为每个open的链接预抓取一个数量的消息(默认情况是100个),也就是说第一个打来的连接将队列里20多个消息都预锁定了,第二个连接读取就为空了。为了避免这样的情况,可以设置预读取为1,使用jms.prefetchPolicy.queuePrefetch参数加载open的url后面如:tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1。
但我加上后,死活连接不上,经过google上百度一下,才知道我这样的写法不对:
failover:(tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1&wireFormat.maxInactivityDuration)其中wireFormat.maxInactivityDuration是心跳参数。
我尝试去掉wireFormat.maxInactivityDuration参数也不行。
最后才知道wireFormat.maxInactivityDuration参数和jms.prefetchPolicy.queuePrefetch参数位置写反了(这个很莫名)
需要这样写才正确:
failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration)?jms.prefetchPolicy.queuePrefetch=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值