小编给大家分享一下Spring Cloud Config Client超时及重试的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
创新互联专注于企业全网营销推广、网站重做改版、黄冈网站定制设计、自适应品牌网站建设、H5建站、商城网站建设、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为黄冈等各大城市提供网站开发制作服务。为 web 项目添加依赖
开启客户端重试功能需要两个新依赖,spring-retry 和 spring-boot-starter-aop,把如下代码添加到 web 项目的 pom.xml 文件中:
org.springframework.retry spring-retry 1.2.2.RELEASE org.springframework.boot spring-boot-starter-aop
然后在 bootstrap.yml 文件中添加如下配置:
spring: application: name: web-client cloud: config: uri: http://localhost:8888 fail-fast: true retry: initial-interval: 1000 max-attempts: 6 max-interval: 2000 multiplier: 1.1
首先把 spring.cloud.config.fail-fast 为true,即在获取不到远程配置时,立即失败,但是用下边的配置进行重试。
spring.cloud.config.retry 所有子项均为默认值:
initial-interval: 最初重试间隔为 1000 毫秒
max-attempts: 最多重试 6 次
max-interval: 最长重试间隔为 2000 毫秒
multiplier: 每次重试失败后,重试间隔所增加的倍数
测试
如果使用了本教程的项目,我们需要首先启动 configserver 项目,然后再启动 registry 项目开启 eureka,因为 web 客户端使用了 eureka 服务,之后关闭 configserver,然后启动 web 项目,会看到如下 log:
2018-05-15 16:04:58.421 INFO 2663 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888
重试 6 次失败后,客户端启动失败,如果中途开启 configserver,则 web 客户端启动成功。
细粒度控制重试
我们可以在代码中实现更精细的控制重试机制,在 web 项目中创建一个新的 java 类 cn.zxuqian.configurations.RetryConfiguration,添加如下代码:
package cn.zxuqian.configurations; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.retry.interceptor.RetryInterceptorBuilder; import org.springframework.retry.interceptor.RetryOperationsInterceptor; public class RetryConfiguration { private static Logger log = LoggerFactory.getLogger(RetryConfiguration.class); @Bean @ConditionalOnMissingBean(name = "configServerRetryInterceptor") public RetryOperationsInterceptor configServerRetryInterceptor() { log.info(String.format( "configServerRetryInterceptor: Changing backOffOptions " + "to initial: %s, multiplier: %s, maxInterval: %s", 1000, 1.2, 5000)); return RetryInterceptorBuilder .stateless() .backOffOptions(1000, 1.2, 5000) .maxAttempts(10) .build(); } }
这里我们定义了configServerRetryInterceptor方法用于 Spring Retry 使用我们自定义的重试拦截器。方法使用 RetryInterceptorBuilder 按要求创建了一个 stateless 的 RetryOperationsInterceptor,并设置了初始重试间隔为 1000 毫秒,增加倍数为 1.2 倍,大重试间隔为 5000 毫秒,大重试次数为 10 次,builder 还提供了诸如配置重试机制之类的接口,有兴趣的读者可自行研究。
@ConditionalOnMissingBean 标明当 BeanFactory 中没有名为 configServerRetryInterceptor 的 bean 时才匹配此 Bean。
最后在 src/main/resources/META-INF/ (没有可创建此文件夹) 新建一个 spring.factories 文件,指定我们刚创建类为启动时的配置,以在获取远程配置之前生效:
org.springframework.cloud.bootstrap.BootstrapConfiguration=cn.zxuqian.configurations.RetryConfiguration
测试
最后在关闭 configserver 的条件下启动 web 项目,然后就会看到重试十次之后,项目启动失败。
看完了这篇文章,相信你对“Spring Cloud Config Client超时及重试的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!