Spring RabbitMQ连接和资源管理问题

时间:2017-06-01 12:10:05

标签: spring spring-boot rabbitmq spring-amqp spring-rabbitmq

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

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

      

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

    当一个RabbitMQ节点关闭时,我收到了它。即使节点再次启动,<div class="msg-con"> <ul class="messages"> <li>messages</li> </ul> </div> 也无法重新连接。

  4. 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  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。