spring-rabbitmq自动重试连接到代理

时间:2017-03-23 16:06:35

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

我已经阅读了这篇文档片段:

  

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?

3 个答案:

答案 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);来更改恢复间隔,其中containerSimpleMessageListenerContainer。在基础连接工厂cachingConnectionFactory.getRabbitConnectionFactory().setNetworkRecoveryInterval(int)中设置恢复间隔似乎没有反应。