美文网首页springcloud
为Spring Cloud Feign配置请求重试

为Spring Cloud Feign配置请求重试

作者: 吴俊达 | 来源:发表于2017-05-08 18:02 被阅读257次

    以下配置基于spring boot版本1.4.5.RELEASE,spring cloud版本采用Camden.SR6。

    参照ribbon工程下面配置请求重试的思路,在feign工程的application.xml文件中,我们同样加上如下配置:

    # 重试机制
    spring.cloud.loadbalancer.retry.enabled = true
    
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
    
    compute-service.ribbon.ConnectTimeout = 250
    compute-service.ribbon.ReadTimeout = 1000
    
    # 对所有操作请求都进行重试
    compute-service.ribbon.OkToRetryOnAllOperations = true
    
    # 切换实例的重试次数
    compute-service.ribbon.MaxAutoRetriesNextServer = 2
    
    # 对当前实例的重试次数
    compute-service.ribbon.MaxAutoRetries = 1
    

    然后经过本地测试,发现重试机制已经生效。
    为何不用像ribbon工程那样,在pom文件引入spring-retry的依赖?

    同样,观察FeignRibbonClientAutoConfiguration类的源码,我们看到有这样两个方法:

    @Bean
    @Primary
    @ConditionalOnMissingClass("org.springframework.retry.support.RetryTemplate")
    public CachingSpringLoadBalancerFactory cachingLBClientFactory(
            SpringClientFactory factory) {
        return new CachingSpringLoadBalancerFactory(factory);
    }
    
    @Bean
    @Primary
    @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate")
    public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory(
            SpringClientFactory factory, LoadBalancedRetryPolicyFactory retryPolicyFactory) {
        return new CachingSpringLoadBalancerFactory(factory, retryPolicyFactory, true);
    }
    

    可见,在不存在RetryTemplate的依赖的情况下,返回了CachingSpringLoadBalancerFactory对象。
    跟踪CachingSpringLoadBalancerFactory类的源码,看到如下构造函数:

    public CachingSpringLoadBalancerFactory(SpringClientFactory factory) {
        this.factory = factory;
        this.loadBalancedRetryPolicyFactory = new RibbonLoadBalancedRetryPolicyFactory(factory);
    }
    

    可以看到,在构造函数里,获得了有效的ribbon负载均衡重试策略工厂。

    另外,如果在pom文件引入spring-retry的依赖、即存在RetryTemplate的依赖的情况下,最终仍能获得一个有效的ribbon负载均衡重试策略工厂。

    相关文章

      网友评论

        本文标题:为Spring Cloud Feign配置请求重试

        本文链接:https://www.haomeiwen.com/subject/zxqvtxtx.html