簡體   English   中英

通過 spring-rabbitmq 自動重試連接到代理

[英]Automatic retry connection to broker by spring-rabbitmq

我已經閱讀了這個文檔片段:

RabbitMQ 自動連接/拓撲恢復

從 Spring AMQP 的第一個版本開始,該框架提供了自己的連接和通道在代理失敗的情況下恢復。 此外,如第 3.1.10 節“配置代理”中所述,RabbitAdmin 將在重新建立連接時重新聲明任何基礎設施 bean(隊列等)。 因此,它不依賴於 amqp-client 庫現在提供的自動恢復。 Spring AMQP 現在使用 4.0.x 版本的 amqp-client,它默認啟用自動恢復。 如果您願意,Spring AMQP 仍然可以使用自己的恢復機制,在客戶端禁用它(通過將底層 RabbitMQ connectionFactory 上的 automaticRecoveryEnabled 屬性設置為 false)。 但是,該框架與啟用的自動恢復完全兼容。 這意味着您在代碼中創建的任何消費者(可能通過 RabbitTemplate.execute())都可以自動恢復。

我不確定我是否正確理解。 在我的application.properties我定義了端口和主機。 在啟動我的 spring-boot 應用程序期間,它成功建立了連接和所有必要的 bean 以與隊列通信。

但是,如果在啟動期間我的應用程序代理關閉並且它將在應用程序啟動五分鍾后啟動怎么辦? spring-rabbitmq是否設法重新連接並定義所有 bean?

沒錯。 Spring AMQP 自動管理重新連接和恢復。

本主題與 bean 定義無關。 如果您談論 Broker 實體聲明,那么是的,它們確實在建立連接時進行了處理。

我遇到了類似的問題,您只需要在連接工廠配置上放置一個屬性即可。

根據這里的文章 set 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>

連接工廠參考這里

是的,當代理重新上線時將重新創建連接。 默認恢復間隔為 5 秒。 您可以通過設置container.setRecoveryInterval(30000);來更改恢復間隔container.setRecoveryInterval(30000); 其中containerSimpleMessageListenerContainer 在底層連接工廠cachingConnectionFactory.getRabbitConnectionFactory().setNetworkRecoveryInterval(int)設置恢復間隔似乎沒有反映。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM