activemq队列模式下的多个消费者问题 | 张扎瓦的博客

activemq队列模式下的多个消费者问题

关于使用activemq多个消费者遇到的一些问题


问题

最近在项目中使用了activemq进行消息的异步传递,只有一个消费者时,系统可以正常运行,但当增加多个消费者时,却只有一个消费者进行消费,其他的消费者不消费。

原因

activemq有一个机制,叫消息预读取,这个机制默认会读取1000条消息发往一个消费者中,当超过1000消息堆积时,才会继续读取剩下的消息发往另一个消费者中。当只有一个消费者时,这个机制可以提高效率,但有多个消费者时,就不合适了,会导致其他消费者闲置。

解决办法

在客户端的连接上,拼接jms.prefetchPolicy.all=xxx,就可以调整消息预读取条数,当有多个消费者时,可以适当的调低这个参数,保证其他消费者也可以消费到,从而提高消费速度。

完整的连接示例(以spring boot为例):

1
spring.activemq.broker-url=tcp://localhost:61616?jms.prefetchPolicy.all=2
如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)