我已经阅读了这篇文档片段:
RabbitMQ自动连接/拓扑恢复
自Spring AMQP的第一个版本以来,该框架已经提供了它 代理失败时自己的连接和通道恢复。 另外,如第3.1.10节“配置代理”中所述, RabbitAdmin将在何时重新声明任何基础结构bean(队列等) 连接重新建立。因此它不依赖于 现在由amqp-client库提供的自动恢复。弹簧 AMQP现在使用4.0.x版本的amqp-client,它有auto 默认情况下启用恢复。 Spring AMQP仍然可以使用它自己的 恢复机制,如果你愿意,在客户端禁用它,(通过 在底层设置automaticRecoveryEnabled属性 RabbitMQ connectionFactory为false)。但是,框架是 完全兼容启用自动恢复。这意味着任何 您在代码中创建的消费者(也许是通过 RabbitTemplate.execute())可以自动恢复。
我不确定我是否正确理解。在我的application.properties
我已经定义了端口和主机。在启动我的spring-boot应用程序期间,它成功建立了连接和所有必要的bean以与队列通信。
然而,如果在启动期间我的应用程序代理关闭,它将在应用程序启动后五分钟启动? spring-rabbitmq
是否设法重新连接并定义所有bean?
答案 0 :(得分:2)
那是对的。 Spring AMQP自动管理重新连接和恢复。
此主题与bean定义无关。如果你谈论Broker实体声明,那么肯定是在连接建立时进行处理。
答案 1 :(得分:0)
我遇到了类似的问题,你只需要在连接工厂配置上放置一个属性。
根据文章here在工厂设置factory.setAutomaticRecoveryEnabled(true);
和factory.setNetworkRecoveryInterval(10000);
,当兔子服务器关闭或连接丢失时,兔子客户端将尝试重新连接。
因为您正在为连接工厂使用弹簧配置,所以连接工厂将类似于以下
<bean id="connectionFactory"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="somehost"/>
<property name="username" value="guest"/>
<property name="password" value="guest"/>
<property name="automaticRecoveryEnabled" value="true"/>
<property name="networkRecoveryInterval" value="100000"/>
</bean>
连接工厂参考here
答案 2 :(得分:0)
是的,当代理重新联机时,将重新创建连接。默认恢复间隔为5秒。您可以通过设置container.setRecoveryInterval(30000);
来更改恢复间隔,其中container
是SimpleMessageListenerContainer
。在基础连接工厂cachingConnectionFactory.getRabbitConnectionFactory().setNetworkRecoveryInterval(int)
中设置恢复间隔似乎没有反应。