[英]Spring boot rabbitmq connection retry configuration
我有與rabbitmq的spring boot cloud微服務,我使用docker-compose啟動所有容器。 Rabbitmq需要一些時間來啟動,在完成啟動之前,我看到了很多連接嘗試:
config-service_1 | 2019-06-22 16:13:13.351 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.351 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.370 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.370 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.378 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.379 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.379 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.386 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.386 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.391 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
config-service_1 | 2019-06-22 16:13:13.401 INFO 6 --- [pool-2-thread-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: rabbitmq:5672
如何為Rabbitmq連接配置重試超時?
我沒有找到任何spring.rabbitmq.**
屬性來執行此操作。
更新
已發現問題,但仍無法解決。
我有一個日志記錄配置,可通過Rabbitmq附加程序發送日志,這是logback-spring.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<springProperty scope="context" name="appName" source="spring.application.name"/>
<springProperty scope="context" name="rabbitMqHost" source="spring.rabbitmq.host" defaultValue="localhost"/>
<springProperty scope="context" name="rabbitMqPort" source="spring.rabbitmq.port" defaultValue="5672"/>
<springProperty scope="context" name="rabbitMqUsername" source="spring.rabbitmq.username" defaultValue="guest"/>
<springProperty scope="context" name="rabbitMqPassword" source="spring.rabbitmq.password" defaultValue="guest"/>
<appender name="AMQP" class="org.springframework.amqp.rabbit.logback.AmqpAppender">
<host>${rabbitMqHost}</host>
<port>${rabbitMqPort}</port>
<username>${rabbitMqUsername}</username>
<password>${rabbitMqPassword}</password>
<applicationId>${appName}</applicationId>
<contentType>application/log</contentType>
<exchangeName>gc.log</exchangeName>
<declareExchange>true</declareExchange>
<deliveryMode>NON_PERSISTENT</deliveryMode>
<charset>UTF-8</charset>
<layout>
<pattern>
${appName}
%date{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", UTC}
%thread
%level
%logger{36}
%message
</pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="AMQP"/>
</root>
</configuration>
如果我刪除此配置,一切正常。
因此,現在的問題是如何為AmqpAppender
配置連接工廠恢復間隔
它當前沒有顯示為Boot屬性,但是您可以在Rabbit偵聽器容器工廠上設置recoveryInterval
或recoveryBackOff
。
只需在某些配置類中獲得對容器工廠的引用(或覆蓋Boot的默認自動配置工廠)並設置屬性即可。
例如
@Bean
public Object configure(SimpleRabbitListenerContainerFactory factory) {
factory.setRecoveryInterval(10_000L);
return null; // you can return null as long as you are on Boot 2.x.
}
請打開“啟動改進GitHub”問題以將其公開為屬性。
編輯
您最初的問題沒有提到您使用RabbitMQ僅用於日志記錄。 以后,請在問題中更加清楚,以便及時獲得正確的答案。
上面的答案適用於嘗試連接到代理的@RabbitListener
方法。
由於日志記錄是“發布”事件,因此,每次您嘗試發送日志(並進行重試)時,都會進行一次連接嘗試,因此您將獲得該INFO日志。
抑制這些日志的唯一方法是將org.springframework.amqp.rabbit.connection.CachingConnectionFactory
的日志級別更改為WARN。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.