Java Spring RabbitMQ-每个连接缓存多个通道?

Java Spring RabbitMQ-每个连接缓存多个通道?,java,rabbitmq,amqp,spring-amqp,Java,Rabbitmq,Amqp,Spring Amqp,使用Spring AMQP的默认缓存策略是创建具有多个通道的单个连接。创建的通道数取决于侦听器的并发性 这给我们带来了一个问题,因为我们有很多监听器,只有少数消费者同时使用。Rabbit建议每个连接使用一位数的通道数 当我们有几个侦听器时,比如说10个,每个侦听器都需要5个并发性。这将创建一个具有50个通道的单一连接,远远超过推荐值 我尝试过使用spring.rabbitmq.cache属性,但我不知道如何设置它,以便每个侦听器使用自己与5个通道的连接。我更喜欢用5个频道创建10个连接,而不是用

使用Spring AMQP的默认缓存策略是创建具有多个通道的单个连接。创建的通道数取决于侦听器的并发性

这给我们带来了一个问题,因为我们有很多监听器,只有少数消费者同时使用。Rabbit建议每个连接使用一位数的通道数

当我们有几个侦听器时,比如说10个,每个侦听器都需要5个并发性。这将创建一个具有50个通道的单一连接,远远超过推荐值

我尝试过使用
spring.rabbitmq.cache
属性,但我不知道如何设置它,以便每个侦听器使用自己与5个通道的连接。我更喜欢用5个频道创建10个连接,而不是用50个频道创建1个连接


有人能给我指出正确的方向吗?

最简单的解决方案是为每个容器提供自己的连接工厂

您可以向容器工厂添加一个
ContainerCustomizer
,并使用它更改每个容器的连接工厂。它将在容器创建之后和启动之前调用

编辑

@springboot应用程序
公共类SO64913992应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(So64913992Application.class,args);
}
@RabbitListener(queues=“foo”,concurrency=“5”)
公共无效列表1(字符串输入){
系统输出打印项次(输入);
}
@RabbitListener(queues=“bar”,concurrency=“5”)
公共void列表2(字符串输入){
系统输出打印项次(输入);
}
}
@组成部分
类定制器{
定制器(通用应用程序上下文上下文,CachingConnectionFactory cf,
SimpleRableBitListenerContainerFactory工厂){
factory.setContainerCustomizer(容器->{
CachingConnectionFactory newCf=新的CachingConnectionFactory(cf.getRabbitConnectionFactory());
String name=“cf.”+container.getQueueNames()[0];
newCf.setConnectionNameStrategy(c->name);
//设置所需的任何其他CCF属性
registerBean(名称,CachingConnectionFactory.class,()->newCf);
context.getBean(name);//初始化
容器。设置连接工厂(newCf);
});
}
}

是否有一种简单的方法来创建
CachingConnectionFactory
的新实例,就像在Spring Boots
RabbitAutoConfiguration
中创建的那样?