Spring RabbitMQ 连接和资源管理问题

Spring RabbitMQ Connection and Resource Management Issues

我需要通过 HAProxy 使用来自 Rabbit HA 集群的消息,所以我切换到 CacheMode.CONNECTION,因为它在 spring-amqp-documentation 中被推荐。此外,我需要使用来自许多队列的消息,因此我为每个队列 SimpleMessageListenerContainer 创建了 4 个并发消费者,我有几个问题:

  1. 经过几次测试,我的方法看起来效率不高,因为每次添加新队列时,也会创建具有 4 个线程的新 SimpleMessageListenerContainer。所以我可以为给定的 SimpleMessageListenerContainer 设置更多队列,这看起来更有效,但也许还有另一种更好的方法?
  2. 为什么当我切换到 CacheMode.CONNECTION 时,SimpleMessageListenerContainer 中的每个消费者都创建了新连接?我能否以某种方式为给定 SimpleMessageListenerContainer 中的所有消费者设置一个连接,或者可能不推荐这样做?
  3. 如何处理异常

    "org.springframework.amqp.rabbit.connection.AutoRecoverConnectionNotCurrentlyOpenException: Auto recovery connection is not currently open"

    我在一个 RabbitMQ 节点宕机时收到了它。即使节点再次启动 SimpleMessageListenerContainer 也无法重新连接。

在此先感谢您的帮助。

  1. 即将发布的 2.0 版本有一个新的 DirectMessageListenerContainer 跨容器 documentation here 共享线程。 2.0.0.M4 里程碑现已推出;预计 GA 发布时间为 7 月中旬。

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

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