在实际项目中我们使用消息队列MQ,一般情况下是多个生产者对应一个消费者,此时消费者这边的压力会大大增加,消费速度跟不上生产速度,就需要提高消费者的消费速度,在Spring Boot中,消费者默认是单线程消费的,此时需要根据我们实际的服务器性能进行合理的采用并发消费数据即可!设置并发线程数量,请参考线程池调优!
在Sping Boot中设置MQ的并发操作:
- RabbitMq消费者工厂配置:
设置ConcurrentConsumers多个并发消费者一起消费,并支持
运行时动态修改
@Configuration public class RabbitMqConfig { //并发数量:根据实际的服务器性能进行配置即可 public static final int DEFAULT_CONCURRENT = 20; @Bean("customContainerFactory") public SimpleRabbitListenerContainerFactory containerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConcurrentConsumers(DEFAULT_CONCURRENT); //设置线程数 factory.setMaxConcurrentConsumers(DEFAULT_CONCURRENT); //最大线程数 configurer.configure(factory, connectionFactory); return factory; } }
- 消费者具体使用
@RabbitListener(queues = {"test-queue"}, containerFactory = "customContainerFactory")
启用customContainerFactory的全部目的是为了允许以并行方式处理消息,以便加快整体执行速度。通过这样做,您将自动签署一份合同,在该合同中,您接受一切都是异步的,并且不能再接受顺序。
如果您在线程之间定义一个序列,并等待前一个序列完成,以便您可以遵守该顺序,那么您将返回到顺序处理,并且启用并发消耗没有任何好处,相反,您将有处理多个线程的开销。