Spring启动rabbitmq连接重试配置
Spring boot rabbitmq connection retry configuration
我有 spring 使用 rabbitmq 启动云微服务,我正在使用 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 appender 发送日志的日志记录配置,这里是 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
配置连接工厂恢复间隔
它目前没有公开为引导 属性,但您可以在 rabbit 侦听器容器工厂上设置 recoveryInterval
或 recoveryBackOff
。
在某些配置中获取对容器工厂的引用 class(或覆盖 Boot 的默认 auto-configured 工厂)并设置 属性.
例如
@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
尝试连接到代理的方法。
由于日志记录是一个 "publishing" 事件,每次您尝试发送日志(以及重试)时都会尝试连接,因此您将获得该 INFO 日志。
抑制这些日志的唯一方法是将 org.springframework.amqp.rabbit.connection.CachingConnectionFactory
的日志级别更改为 WARN。
我有 spring 使用 rabbitmq 启动云微服务,我正在使用 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 appender 发送日志的日志记录配置,这里是 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
它目前没有公开为引导 属性,但您可以在 rabbit 侦听器容器工厂上设置 recoveryInterval
或 recoveryBackOff
。
在某些配置中获取对容器工厂的引用 class(或覆盖 Boot 的默认 auto-configured 工厂)并设置 属性.
例如
@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
尝试连接到代理的方法。
由于日志记录是一个 "publishing" 事件,每次您尝试发送日志(以及重试)时都会尝试连接,因此您将获得该 INFO 日志。
抑制这些日志的唯一方法是将 org.springframework.amqp.rabbit.connection.CachingConnectionFactory
的日志级别更改为 WARN。