Spring Cloud Config 客户端获取配置时出现异常
2020-03-29 本文已影响0人
zbsong
如果客户端因为网络波动等其它间接性原因导致连接不到配置中心而直接启动失败,这样的代价似乎有些高,所以针对这样的问题,Config客户端提供了自动重试的功能。
- 还是继续用上一节中创建的config-client工程
1.修改bootstrap.properties文件,添加spring.cloud.config.fail-fast=true
通过该参数可以避免当Config Server配置有误时,过多的等待前置加载时间,可以直接快速返回失败信息。
server.port=7001
spring.application.name=configtest
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:7000/
spring.cloud.config.fail-fast=true
2.编辑pom.xml,新增spring-retry和spring-boot-starter-aop依赖。
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
-
测试
到目前为止,添加完spring-retry和spring-boot-starter-aop依赖后,就不需要再有多余的配置了,如果config-server宕机或者网络延迟等原因导致连接不到时就会根据默认配置进行重试了,默认会重试6次,下面我们停掉config-server服务,然后启动config-client服务来测试一下。 image.png 从控制台打印的日志可以看出,进行了6次重试,6次之后还是连接不到才返回错误信息。
我们也可以根据自己的需求设置重试次数,重试间隔等。
spring.cloud.config.retry.multiplier=1000
:初始重试间隔时间,单位为毫秒,默认1000毫秒。
spring.cloud.config.retry.initial-interval=2
:下一间隔的剩数,默认为1.1,比如初始重试间隔为1000毫秒,那么下次失败后的重试间隔为1000x1.1= 1100毫秒。
spring.cloud.config.retry.max-interval=5000
:最大间隔时间,默认2000毫秒。
spring.cloud.config.retry.max-attempts=10
:最大重试次数,默认6次。
修改bootstrap.properties文件,添加上述参数
server.port=7001
spring.application.name=configtest
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:7000/
spring.cloud.config.fail-fast=true
spring.cloud.config.retry.multiplier=1000
spring.cloud.config.retry.initial-interval=2
spring.cloud.config.retry.max-interval=5000
spring.cloud.config.retry.max-attempts=10
再次启动config-config,可以看到会根据我们自己配置的参数进行重试。
image.png
我们可以看到进行了10次重试,前几次重试间隔按照我们配置的下次间隔乘数进行重试,直到时间大于了我们设置的最大间隔时间后都开始按照设置的最大间隔时间进行重试,直到重试次数达到了我们设置的最大重试次数,还是连接不上就返回错误信息。