zoukankan      html  css  js  c++  java
  • springcloud超时机制

    springcloud中有很多超时时间配置,总结一下各处超时时间的使用及配置。

    • zuul超时

      zuul超时分两种情况,使用service discovery,需要配置ribbon.ReadTimeout 和 ribbon.SocketTimeout

    hystrix:
      command:
        default:
          execution:
            isolation:
              thread:
                timeoutInMilliseconds: 100000 #命令执行超时时间,默认1000ms,应大于ribbon超时时间
    ribbon:
      ReadTimeout: 60000
      ConnectTimeout: 3000
    

    此种情况下,Zuul转发所使用的过滤器是org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter ,在这个过滤器中,整合了Hystrix以及Ribbon。

    不使用service discovery,直接使用url(不常用),使用zuul.host.connect-timeout-millis 和 zuul.host.socket-timeout-millis

    zuul:
      routes:
        user-route:                   # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
          url: http://192.168.0.11:8000/ # 指定的url
          path: /user/**              # url对应的路径
    处。
    zuul:
      host:
        socket-timeout-millis: 10000
        connect-timeout-millis: 2000
    
    • ribbon超时

    全局设置

    ribbon:
      ConnectTimeout: 3000
      ReadTimeout: 60000
    

    根据service-id进行设置,不同service-id设置不同的参数

    service-id:xcloud-dataservice
      ribbon:
        ConnectTimeout: 3000
        ReadTimeout: 60000
    
    • hystrix超时
    hystrix:
      command:
        default:
          execution:
            timeout:
              enabled: true
            isolation:
              thread:
                timeoutInMilliseconds: 1000
    
    
    • feign超时

    从Spring Cloud Edgware开始,Feign支持使用属性配置超时,默认connectTimeout:10000,readTimeout: 60000:

    feign:
      client:
        config:
          feignName:
            connectTimeout: 10000
            readTimeout: 60000
    

    老版本,可以重写feign.Request.Options ,参考:org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration#feignRequestOptions 的写法即可。

    如下,启动类加上注解@Import(FeignConfiguration.class)即可。

    @Configuration
    public class FeignConfiguration {
        @Autowired
        private ObjectFactory<HttpMessageConverters> messageConverters;
        @Bean
        public Retryer retryer(){
            return new Retryer.Default(1000,10000,3);
        }
    
        @Bean
        Request.Options feignOptions() {
            return new Request.Options(5 * 1000, 30 * 1000);
        }
    
    
        @Bean
        @Primary
        @Scope("prototype")
        public Encoder multipartFormEncoder() {
            return new SpringFormEncoder(new SpringEncoder(messageConverters));
        }
    
        @Bean
        public Logger.Level feignLoggerLevel() {
            return Logger.Level.FULL;
        }
    
        @Bean
        public ErrorDecoder errorDecoder(){
            return new FeignErrorDecoder();
        }
    
    }
    
    
    • RestTemplate超时
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
      SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
      simpleClientHttpRequestFactory.setConnectTimeout(1000);
      simpleClientHttpRequestFactory.setReadTimeout(30000);
      return new RestTemplate(simpleClientHttpRequestFactory);
    }
    
    • ribbon配置示例:
    ribbon.eureka.enabled = true
    ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
    ribbon.MaxAutoRetries=1
    ribbon.MaxAutoRetriesNextServer=2
    ribbon.ConnectTimeout=3000
    ribbon.ReadTimeout=100000
    

    根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),如果不行,就换一个实例进行访问,如果还是不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),如果依然不行,返回失败信息。如果在此期间达到hystrix的超时时间,则返回fallback内容。

  • 相关阅读:
    【ARTS】打卡第七周
    【ARTS】打卡第六周
    【ARTS】打卡第五周
    【leetcode】 438. Find All Anagrams in a String
    【ARTS】打卡第四周
    【ARTS】打卡第三周
    【leetcode】 11. Container With Most Water
    【ARTS】打卡第二周
    【ARTS】打卡第一周
    深度VS广度——谈谈对测试职业的一些思考
  • 原文地址:https://www.cnblogs.com/iiot/p/8527533.html
Copyright © 2011-2022 走看看