Java 通过spring rabbitmq自动重试到代理的连接
我读过这段文档: RabbitMQ自动连接/拓扑恢复 自Spring AMQP的第一个版本以来,该框架提供了 代理失败时自己的连接和通道恢复。 此外,如第3.1.10节“配置代理”所述 RabbitAdmin将在以下情况下重新声明任何基础结构bean(队列等) 重新建立连接。因此,它不依赖于 现在由amqp客户端库提供的自动恢复。春天 AMQP现在使用4.0.x版本的AMQP客户端,该客户端具有自动 默认情况下已启用恢复。Spring AMQP仍然可以使用自己的 恢复机制,如果您愿意,在客户端中禁用它(通过 在基础服务器上设置automaticRecoveryEnabled属性 RabbitMQ连接工厂为false)。然而,该框架并不完善 与启用的自动恢复完全兼容。这意味着任何 您在代码中创建的消费者(可能通过 RabbitTemplate.execute())可以自动恢复 我不确定我是否正确理解。在我的Java 通过spring rabbitmq自动重试到代理的连接,java,spring-boot,spring-integration,spring-amqp,spring-rabbit,Java,Spring Boot,Spring Integration,Spring Amqp,Spring Rabbit,我读过这段文档: RabbitMQ自动连接/拓扑恢复 自Spring AMQP的第一个版本以来,该框架提供了 代理失败时自己的连接和通道恢复。 此外,如第3.1.10节“配置代理”所述 RabbitAdmin将在以下情况下重新声明任何基础结构bean(队列等) 重新建立连接。因此,它不依赖于 现在由amqp客户端库提供的自动恢复。春天 AMQP现在使用4.0.x版本的AMQP客户端,该客户端具有自动 默认情况下已启用恢复。Spring AMQP仍然可以使用自己的 恢复机制,如果您愿意,在客户端中
application.properties
中,我定义了端口和主机。在启动我的spring boot应用程序期间,它成功地建立了连接,并建立了与队列通信所需的所有bean
但是,如果在启动期间我的应用程序代理关闭,并且将在应用程序启动五分钟后启动,该怎么办?
springrabbitmq
是否能够重新连接并定义所有bean?这是正确的。Spring AMQP自动管理重新连接和恢复
本主题与bean定义无关。如果您谈论的是代理实体声明,那么是的,它们实际上是在建立连接时处理的。我也遇到过类似的问题,您只需要在连接工厂配置中放置一个属性 根据文章集
factory.setAutomaticRecoveryEnabled(true)代码>和工厂.setNetworkRecoveryInterval(10000)当兔子服务器关闭或连接丢失时,工厂上的代码>和兔子客户端将尝试重新连接
因为您正在为连接工厂使用spring配置,所以您的连接工厂将如下所示
<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>
连接工厂参考是的,当代理重新联机时,将重新创建连接。默认恢复间隔为5秒。您可以通过设置container.setRecoveryInterval(30000)来更改恢复间隔代码>其中容器
是简单消息容器
。在基础连接工厂cachingConnectionFactory.getRabbitConnectionFactory().setNetworkRecoveryInterval(int)
中设置恢复间隔似乎没有反映出来。在简单语言中,成功重新连接后,侦听器将能够获取消息?类似的情况。请看这里:好的,谢谢。我会读到的。明天我会在实践中检查,如果出现问题,我会给你一个提示!除了阅读此参考资料之外,我还应该大致阅读一下spring rabbitmq的代码,我想还有一件事:在我明天检查之前,您是否完全理解我的用例?在属性中,我有主机和端口。如果代理关闭,那么在启动/启动/mvn spring boot期间:运行spring boot应用程序-它应该启动还是抛出异常并关闭?有。您可以在其中一个上使用start/stop RabbitMQ。好的,可以从应用程序.properties
??@Haskell中配置它。Spring从应用程序中获取系统属性和属性,因此,您可以在上面的示例中使用它来代替10000。我不确定是否可以从这个文件中配置它:但是,我可以处理JavaConfig。请告诉我,如果您的配置符合我的期望:在启动spring boot应用程序期间,我们可以在日志中看到没有连接,并且在5分钟后(代理在5分钟后死亡),它会建立连接并向侦听器发送消息。@HaskellFun您是否尝试在spring boot应用程序启动后关闭代理?我提到的属性在启动应用程序部署后关闭代理时有效。没有什么错误:类名必须是com.rabbitmq.client.ConnectionFactory
,因为此类具有automaticRecoveryEnabled和networkRecoveryInterval属性。这是驱动程序连接工厂。这个工厂实例需要作为构造函数参数传递给spring的CachingConnectionFactory