Spring RabbitMQ 连接和资源管理问题
Spring RabbitMQ Connection and Resource Management Issues
我需要通过 HAProxy 使用来自 Rabbit HA 集群的消息,所以我切换到 CacheMode.CONNECTION
,因为它在 spring-amqp-documentation 中被推荐。此外,我需要使用来自许多队列的消息,因此我为每个队列 SimpleMessageListenerContainer
创建了 4 个并发消费者,我有几个问题:
- 经过几次测试,我的方法看起来效率不高,因为每次添加新队列时,也会创建具有 4 个线程的新 SimpleMessageListenerContainer。所以我可以为给定的
SimpleMessageListenerContainer
设置更多队列,这看起来更有效,但也许还有另一种更好的方法?
- 为什么当我切换到
CacheMode.CONNECTION
时,SimpleMessageListenerContainer
中的每个消费者都创建了新连接?我能否以某种方式为给定 SimpleMessageListenerContainer
中的所有消费者设置一个连接,或者可能不推荐这样做?
如何处理异常
"org.springframework.amqp.rabbit.connection.AutoRecoverConnectionNotCurrentlyOpenException:
Auto recovery connection is not currently open"
我在一个 RabbitMQ 节点宕机时收到了它。即使节点再次启动 SimpleMessageListenerContainer
也无法重新连接。
在此先感谢您的帮助。
即将发布的 2.0 版本有一个新的 DirectMessageListenerContainer
跨容器 documentation here 共享线程。
2.0.0.M4
里程碑现已推出;预计 GA 发布时间为 7 月中旬。
如果您希望每个容器有一个连接,请使用默认缓存模式并为每个容器使用单独的连接工厂。
禁用客户端的连接工厂自动恢复机制;它在 4.x 客户端中默认启用; Spring AMQP 有自己的恢复机制,通常恢复得更快。自版本 1.7.1 Spring AMQP 默认禁用它,除非您配置自己的 Rabbit ConnectionFactory。
我需要通过 HAProxy 使用来自 Rabbit HA 集群的消息,所以我切换到 CacheMode.CONNECTION
,因为它在 spring-amqp-documentation 中被推荐。此外,我需要使用来自许多队列的消息,因此我为每个队列 SimpleMessageListenerContainer
创建了 4 个并发消费者,我有几个问题:
- 经过几次测试,我的方法看起来效率不高,因为每次添加新队列时,也会创建具有 4 个线程的新 SimpleMessageListenerContainer。所以我可以为给定的
SimpleMessageListenerContainer
设置更多队列,这看起来更有效,但也许还有另一种更好的方法? - 为什么当我切换到
CacheMode.CONNECTION
时,SimpleMessageListenerContainer
中的每个消费者都创建了新连接?我能否以某种方式为给定SimpleMessageListenerContainer
中的所有消费者设置一个连接,或者可能不推荐这样做? 如何处理异常
"org.springframework.amqp.rabbit.connection.AutoRecoverConnectionNotCurrentlyOpenException: Auto recovery connection is not currently open"
我在一个 RabbitMQ 节点宕机时收到了它。即使节点再次启动
SimpleMessageListenerContainer
也无法重新连接。
在此先感谢您的帮助。
即将发布的 2.0 版本有一个新的
DirectMessageListenerContainer
跨容器 documentation here 共享线程。2.0.0.M4
里程碑现已推出;预计 GA 发布时间为 7 月中旬。如果您希望每个容器有一个连接,请使用默认缓存模式并为每个容器使用单独的连接工厂。
禁用客户端的连接工厂自动恢复机制;它在 4.x 客户端中默认启用; Spring AMQP 有自己的恢复机制,通常恢复得更快。自版本 1.7.1 Spring AMQP 默认禁用它,除非您配置自己的 Rabbit ConnectionFactory。