rabbitMq 针对于当前监听的队列,来控制消费者并发数量,不影响其他队列,代码示例

java 复制代码
@Configuration
@ConditionalOnClass(SimpleRabbitListenerContainerFactory.class)
public class ConsumerConfig {

	@Value("${rabbit.batch.num:100}")
	private int batchNum;

	@Bean("batchQueueRabbitListenerContainerFactory")
	public SimpleRabbitListenerContainerFactory batchQueueRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
		SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
		factory.setConnectionFactory(connectionFactory);
		factory.setBatchListener(true);
		factory.setConsumerBatchEnabled(true);
		factory.setBatchSize(batchNum);
		factory.setConcurrentConsumers(5); // 设置并发消费者数量为 5
		factory.setMaxConcurrentConsumers(10); // 设置最大并发消费者数量为 10
		return factory;
	}
}

concurrentConsumers 和 maxConcurrentConsumers 属性的具体含义如下:

concurrentConsumers:指定同时运行的消费者数量,默认为1。

maxConcurrentConsumers:指定允许的最大并发消费者数量,默认为1。

因此,在上述示例中,设置了 concurrentConsumers 为 5,maxConcurrentConsumers 为 10,意味着 RabbitMQ 容器将维持一个初始的消费者池大小为 5,并在需要时最多扩展到 10 个并发消费者。

通过以上修改,你就可以在 batchQueueRabbitListenerContainerFactory 中控制消费者的并发数量了。根据你的实际需求,可以调整并发消费者的数量以满足系统性能和资源的要求。
需要注意的是,这种设置会影响到特定队列的消费者并发数量,而不会影响其他队列的消费者。因为你是针对特定的batchQueueRabbitListenerContainerFactory进行配置,所以只会影响使用该工厂的队列。
如果你想配置多个工厂,可以继续添加其他的@Bean方法。

例如,你可以添加另一个SimpleRabbitListenerContainerFactory bean,命名为anotherQueueRabbitListenerContainerFactory,并配置相应的属性:

java 复制代码
@Bean("anotherQueueRabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory anotherQueueRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    // 配置其他属性
    return factory;
}

通过这种方式,你可以定义多个SimpleRabbitListenerContainerFactory bean,并分别配置每个工厂需要的属性。然后在需要使用特定工厂的@RabbitListener注解中,通过containerFactory属性指定使用哪个工厂。

举个例子,如果你希望某个队列使用anotherQueueRabbitListenerContainerFactory工厂进行监听,可以这样设置:

java 复制代码
@RabbitListener(queues = "another.queue", containerFactory = "anotherQueueRabbitListenerContainerFactory")
public void onAnotherMessage(Message message) {
    // 处理消息
}

通过这种方式,你可以根据需要定义多个工厂,并将它们分配给不同的队列进行监听。

以下是rabbitMq监听消息代码:

java 复制代码
@RabbitListener(queues = "test.queue", containerFactory = "batchQueueRabbitListenerContainerFactory")
@RabbitHandler
public void onReportMessage(List<Message> messages) {
	List<Map<String, Object>> list = messages.stream().map(message -> (Map<String, Object>) message.getPayload()).collect(Collectors.toList());
	log.info("report收到数据:{}", JSON.toJSONString(list));
	service.handler(list);
}
相关推荐
love530love16 小时前
ComfyUI 报错解决记录:NumPy/SciPy 不兼容与 OpenCV 扩展模块缺失
人工智能·windows·python·opencv·numpy·scipy·layerstyle
梅梅绵绵冰17 小时前
MyBatisPlus重点内容
windows
火星数据-Tina17 小时前
巨省Token:OpenClaw安装部署并接入数眼智能特价模型全流程(包含Windows和Mac)
windows·macos
love530love1 天前
Windows 11 源码编译 vLLM 0.16 完全指南(CUDA 12.6 / PyTorch 2.7.1+cu126)
人工智能·pytorch·windows·python·深度学习·comfyui·vllm
阿昭L1 天前
Windows内核驱动开发时是否要设置版本控制宏
windows·驱动开发·内核
代码探秘者1 天前
【Redis】分布式锁深度解析:实现、可重入、主从一致性与强一致方案
java·数据库·redis·分布式·缓存·面试
yuweiade1 天前
新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程
windows
西***63471 天前
无死机、高流畅!FPGA架构高清画面分割器解锁多场景应用新可能
分布式·音视频
FreeBuf_1 天前
黑客涉嫌兜售Windows远程桌面服务0Day漏洞利用程序
windows·0day漏洞
要开心吖ZSH1 天前
(三)OpenClaw 云端服务器控制本地 Windows 浏览器完整配置指南(SSH方式)
运维·服务器·windows·openclaw