工作随笔——rabbitmq的多线程监听(Springboot)

it2024-11-13  5

一、需求

使用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个线程并发监听。

最新回复(0)