工作随笔——rabbitmq的多线程监听(Springboot)
一、需求
使用rabbitmq转发大量消息,提高效率。由于springboot中rabbitmq默认是单线程监听,所以需要我们加以配置。
二、方案
配置rabbitmq多线程监听,提供SimpleRabbitListenerContainerFactory
类的bean,为数据量大的队列指定这个bean。
设置多线程批量处理。在任意配置类中,提供这个bean。(注意配置类中的Listener会覆盖配置文件中的配置)
// 配置批量监听容器
@Bean("batchQueueRabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory batchQueueRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
//设置批量
factory.setBatchListener(true);
factory.setConsumerBatchEnabled(true);//设置BatchMessageListener生效
factory.setBatchSize(1000);//设置监听器一次批量处理的消息数量
factory.setConcurrentConsumers(10); //设置线程数
factory.setMaxConcurrentConsumers(10); //最大线程数
return factory;
}
为队列指定这个bean
// 创建消费者,比较两者时间
@RabbitListener(queues = "xiaomi",containerFactory = "batchQueueRabbitListenerContainerFactory")
public void xiaomiHandler(List<Message> messages) throws IOException, ClassNotFoundException {
log.info("xiaomiHandler>>>>>" + messages.size());
}
三、测试
确实是10个线程并发监听。
作者:⚠小白出没⚠
来源链接:https://blog.csdn.net/qq_43585377/article/details/109204501
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。