0


谈谈如何提升rabbitmq的消费速度

谈谈如何提升rabbitmq的消费速度

在MQ实际使用场景中,往往是生产速度大于消费速度,加上消费者可能存在比较复杂的业务逻辑,会造成消息堆积,除了,在rabbitmq的使用中,我认为可以分为两种方式来增加消费速度。

第一:增加消费者服务的数量

以 @RabbitmqListener 注解举例,当你没指定 containerFactory 时,默认使用的是 SimpleRabbitListenerContainerFactory 创建一个消息监听容器 ,从源码中可以找到:

privatevolatileint concurrentConsumers =1;

当容器启动时,设置了n个消费者来监听消息,这个n就等于1

protectedintinitializeConsumers(){int count =0;synchronized(this.consumersMonitor){if(this.consumers ==null){this.cancellationLock.reset();this.consumers =newHashSet(this.concurrentConsumers);for(int i =0; i <this.concurrentConsumers;++i){BlockingQueueConsumer consumer =this.createBlockingQueueConsumer();this.consumers.add(consumer);++count;}}return count;}}

同时还可以设置 prefetchCount 参数,这个参数可以配置每个消费者一次性能投递的消息数量,如果每次都投递一个消息,这样无疑增加了网络IO的时间。

注意:假设你配置了prefetchCount 参数为100,消费者数量大于1,在部分场景下,消息总数小于100时,总是投递到第一个消费者队列,后面的消费者就成了摆设,所以你还可以配置不定消费者,格式为:1-10,意为最小1个消费者队列,当不够使用时会自动创建

第二:在消费者中使用多线程

第一种方式中,创建了多个消费者监听mq,消费者增加的情况下,mq服务的压力也会增大,所以还可以直接在消费者中 使用多线程批量消费。

这种情况下,必须要配置prefetchCount 大于1,否则每次都是批处理1条消息

总结

在实际使用过程中一般可以使用这两种情况结合,比如可以配置2个消费者队列,每个队列使用多线程消费,已增加消费速率。


本文转载自: https://blog.csdn.net/yyj12138/article/details/126936316
版权归原作者 野猪佩奇ii 所有, 如有侵权,请联系我们删除。

“谈谈如何提升rabbitmq的消费速度”的评论:

还没有评论