Spring RabbitMQ连接和资源管理问题

Spring RabbitMQ连接和资源管理问题,spring,spring-boot,rabbitmq,spring-amqp,spring-rabbit,Spring,Spring Boot,Rabbitmq,Spring Amqp,Spring Rabbit,我需要通过HAProxy使用来自Rabbit HA集群的消息,因此我切换到了中建议的CacheMode.CONNECTION。此外,我需要使用来自多个队列的消息,因此我为每个队列创建了一个包含4个并发使用者的SimpleMessageListenerContainer,我有几个问题: 经过几次测试后,我的方法似乎效率不高,因为每次添加新队列时,都会使用4个线程创建新的SimpleMessageListenerContainer。因此,我可以为给定的SimpleMessageListenerCon

我需要通过HAProxy使用来自Rabbit HA集群的消息,因此我切换到了中建议的
CacheMode.CONNECTION
。此外,我需要使用来自多个队列的消息,因此我为每个队列创建了一个包含4个并发使用者的SimpleMessageListenerContainer,我有几个问题:

  • 经过几次测试后,我的方法似乎效率不高,因为每次添加新队列时,都会使用4个线程创建新的SimpleMessageListenerContainer。因此,我可以为给定的
    SimpleMessageListenerContainer
    设置更多队列。什么看起来更有效,但可能还有其他更好的方法
  • 为什么当我切换到
    CacheMode时,
    SimpleMessageListenerContainer
    中的每个消费者的连接都会创建新的连接?我是否可以以某种方式为给定的
    SimpleMessageListenerContainer
    中的所有使用者设置一个连接,或者不建议这样做
  • 如何处理异常

    “org.springframework.amqp.rabbit.connection.AutoRecoverConnectionNotCurrentlyOpenException: “自动恢复连接当前未打开”

    当一个RabbitMQ节点关闭时,我收到了它。即使节点再次启动
    SimpleMessageListenerContainer
    也无法重新连接

  • 提前谢谢你的帮助

  • 即将发布的2.0版本有一个新的
    DirectMessageListenerContainer
    ,它跨容器共享线程。
    2.0.0.M4
    里程碑现在可用;GA预计将于7月中旬发布

  • 如果希望每个容器都有一个连接,请使用默认缓存模式,并为每个容器使用单独的连接工厂

  • 禁用客户端的连接工厂自动恢复机制;默认情况下,它在4.x客户端中启用;Spring AMQP有自己的恢复机制,通常可以更快地恢复。由于版本1.7.1,Spring AMQP在默认情况下禁用它,除非您配置自己的Rabbit ConnectionFactory