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。

failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration)?jms.prefetchPolicy.queuePrefetch=1

你可能感兴趣的:(activemq)