当前位置: 首页 > 知识库问答 >
问题:

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

诸龙野
2023-03-14

我读过这段文档:

RabbitMQ自动连接/拓扑恢复

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

我不确定我是否正确理解了。在我的应用程序中。属性我已经定义了端口和主机。在启动我的spring boot应用程序期间,它成功地建立了连接和所有必要的bean,以便与队列通信。

然而,如果在启动期间,我的应用程序代理关闭,并且将在应用程序启动五分钟后启动,该怎么办?spring rabbitmq是否能够重新连接并定义所有bean?

共有3个答案

马才
2023-03-14

是的,代理重新上线时将重新创建连接。默认恢复间隔为5秒。您可以通过设置container.setRecoveryInterval(30000);来更改恢复间隔,其中容器SimpleMessageListenerContainer。在底层连接工厂cachingConnectionFactory.getRabbitConnectionFactory(). setNetworkRecoveryInterval(int)中设置恢复间隔似乎没有反映。

陈项禹
2023-03-14

我遇到过类似的问题,您只需要在连接工厂配置中添加一个属性。

根据此处的文章设置<代码>工厂。setAutomaticRecoveryEnabled(真) 和<代码>工厂。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>

连接工厂参考这里

司寇光华
2023-03-14

没错。Spring AMQP自动管理重新连接和恢复。

此主题与bean定义无关。如果您谈论的是代理实体声明,那么是的,它们实际上是在建立连接时处理的。

 类似资料:
  • 问题内容: 我已阅读此文档片段: RabbitMQ自动连接/拓扑恢复 从Spring AMQP的第一个版本开始,该框架在代理发生故障的情况下提供了自己的连接和通道恢复。另外,如第3.1.10节“配置代理”中所述,当重新建立连接时,RabbitAdmin将重新声明任何基础结构Bean(队列等)。因此,它不依赖于amqp- client库现在提供的自动恢复。Spring AMQP现在使用amqp-cl

  • 问题内容: 我有一个客户端,一个服务器和一个数据库。客户端通过EJB远程接口与服务器通信。作为服务器-我使用Wildfly 8.2.0。作为数据库- 我使用MySQL。服务器通过JPA /休眠与MySQL通信。当我关闭MySQL服务器时,Wildfly当然会引发异常。但是,当我再次打开MySQL时- Wildfly仍然会抛出相同的错误。我必须关闭Wildfly,然后重新将Wildfly重新连接到数

  • 我是AnyLogic的新手,我正在尝试创建一个自定义网络...但我无法成功完成此任务:( 然后我有一个变量“network”,它包含年龄类之间链接的平均数。 我想要的是每个代理根据矩阵创建与其他代理的链接。 我不知道如何对一个座席说“连接到另一个具有AgeClass=3的座席” 谢谢大家的支持!!!

  • OpenStack使用RabbitMQ作为消息传递系统。为此,有几个交换机和队列。我发现名为“nova”的“topic”类型的交换用于消息传输。Exchange使用路由密钥将消息路由到队列(http://www.rabbitmq.com/tutorials/amqp-concepts.html). (有用图像位于http://www.rabbitmq.com/img/tutorials/intro

  • 我在Maven中使用SpringREST和Mongo来创建一个连接到服务器的web服务。问题是我还没有为Mongo编写任何代码,它试图连接到localhost,这给我带来了一个MongoSocketOpenException。我所写的唯一代码是从main开始的两行代码。这是stacktrace: 这是我的pom.xml 最后,我必须声明,尽管存在异常,但程序运行良好 提前感谢!