Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过spring rabbitmq自动重试到代理的连接_Java_Spring Boot_Spring Integration_Spring Amqp_Spring Rabbit - Fatal编程技术网

Java 通过spring rabbitmq自动重试到代理的连接

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仍然可以使用自己的 恢复机制,如果您愿意,在客户端中

我读过这段文档:

RabbitMQ自动连接/拓扑恢复

自Spring AMQP的第一个版本以来,该框架提供了 代理失败时自己的连接和通道恢复。 此外,如第3.1.10节“配置代理”所述 RabbitAdmin将在以下情况下重新声明任何基础结构bean(队列等) 重新建立连接。因此,它不依赖于 现在由amqp客户端库提供的自动恢复。春天 AMQP现在使用4.0.x版本的AMQP客户端,该客户端具有自动 默认情况下已启用恢复。Spring AMQP仍然可以使用自己的 恢复机制,如果您愿意,在客户端中禁用它(通过 在基础服务器上设置automaticRecoveryEnabled属性 RabbitMQ连接工厂为false)。然而,该框架并不完善 与启用的自动恢复完全兼容。这意味着任何 您在代码中创建的消费者(可能通过 RabbitTemplate.execute())可以自动恢复

我不确定我是否正确理解。在我的
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