SpringCloud实战之Ribbon的重试、超时、负载均衡

最近在学习SpringCloud,也是遇到各种问题,各种查阅资料,但是相关资料很少,也是一步踩一个坑,所以总结一下,方便以后查看。

以下是请求连接和响应的超时时间配置

在SpringCloud项目中,RestTemplate一般通过负责均匀来使用,其超时时间不能通过ribbon直接来设置,这样设置是无效的。

错误的

#ribbon的超时时间
ribbon:
  ReadTimeout: 500 #读取超时时间
  ConnectTimeout: 2000  #连接超时时间

正确的

 @Bean
    @LoadBalanced //开启负载均衡注解
    public RestTemplate restTemplate(){
        HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectTimeout(500);
        httpRequestFactory.setReadTimeout(2000);
        return new RestTemplate(httpRequestFactory);
    }

以下是重试相关配置

Ribbon通过增加Spring-retry还有相关配置开启了重试,这个重试机制对于OpenFeign是不起作用的,但是对于@LoadBalanced注解修饰的RestTemplate是有作用的。

pom

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.2.4.RELEASE</version>
</dependency>

yml 

spring:
  application:
    name: consumer
  cloud:
    loadbalancer:
      retry:
        enabled: true

provider:
  ribbon:
    #负载均衡策略
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机
    #  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
    #  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试
    #  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
    #  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
    # 同一实例最大重试次数,不包括首次调用
    MaxAutoRetries: 1
    # 重试其他实例的最大重试次数,不包括首次所选的server
    MaxAutoRetriesNextServer: 2
    # 是否所有操作都进行重试
    #当OkToRetryOnAllOperations设置为false时,只会对get请求进行重试。
    #如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,
    #如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。
    OkToRetryOnAllOperations: false

provider是注册中心服务的名称,表示只对provider这个服务生效,其它服务不生效

记录一个问题,配置负载均衡策略的时候,使用全局ribbon配置不生效,只有指定服务才生效,原因暂时还不清楚,看的得撸一下源码了

如果不配置ribbon重试次数,默认重试一次

ribbon重试计算公式:MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries *MaxAutoRetriesNextServer) ,即重试5次 (不包括首次调用)一共产生6次调用。

楼主也是刚开始学习springcloud,如果有什么不对的地方,欢迎大家指出,一起学习!!!

发布了34 篇原创文章 · 获赞 5 · 访问量 1709

猜你喜欢

转载自blog.csdn.net/zhengliangs/article/details/100893985