zoukankan      html  css  js  c++  java
  • Spring Cloud各组件超时总结

    Ribbon的超时

    • 全局设置:
    ribbon:
        ReadTimeout: 60000
        ConnectTimeout: 60000
    • 1
    • 2
    • 3
    • 局部设置:
    service-id:
        ribbon:
        ReadTimeout:1000 
        ConnectTimeout:1000
    • 1
    • 2
    • 3
    • 4

    其中, service-id 是Ribbon所使用的虚拟主机名,一般和Eureka Server上注册的服务名称一致,即:与 spring.application.name 一致。

    Feign的超时

    从Spring Cloud Edgware开始,Feign支持使用属性配置超时:

    feign: 
        client:config:
            feignName:
                connectTimeout:5000
                readTimeout:5000
    • 1
    • 2
    • 3
    • 4
    • 5

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

    RestTemplate的超时

    一些时侯,我们可能使用了RestTemplate,例如

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate () 
    {
      return new RestTemplate ();
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时,超时可使用如下方式设置:

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate () 
    {
    SimpleClientHttpRequestFactory simpleClientHttpRequestFactory  = new SimpleClientHttpRequestFactory ();
    simpleClientHttpRequestFactory.setConnectTimeout(1000);
    simpleClientHttpRequestFactory.setReadTimeout(1000);
      return new RestTemplate(simpleClientHttpRequestFactory);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Zuul的超时

    Zuul的超时比较复杂,因为Zuul整合了Ribbon、Hystrix。下面分两种情况讨论:

    • 如果Zuul的路由使用了Ribbon 
      那么:Zuul的超时则与Ribbon、Hystrix相关,此时Zuul的超时可以配置类似如下:
    hystrix:
        command:
            default:
                execution:
                    isolation:
                        thread:
                            timeoutInMilliseconds:1000
                            ribbon:
                                ReadTimeout:1000
                                ConnectTimeout:1000
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    • 如果Zuul的路由未使用Ribbon 
      例如:Zuul的路由配置如下:
    zuul:
        routes:
        user-route:      # 该配置方式中,user-route只是给路由一个名称,可以任意起名。
         url:http://localhost:8000/  # 指定的url   
         path: /user/**      # url对应的路径。
    • 1
    • 2
    • 3
    • 4
    • 5

    那么,此时Zuul的超时只与如下两个配置有关:

    zuul:
    host:
        socket-timeout-millis:10000
        connect-timeout-millis:2000
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代码解析:直接配置URL路由的方式,用不上Ribbon,也用不上Hystrix,Zuul转发所使用的过滤器是 org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter ,在这个过滤器中,Zuul使用Apache HttpClient进行转发。 
    在现实场景中,有时候可能两种路由方式配合使用,因此,建议大家配置以上所有属性。

    Hystrix的超时

    hystrix:
    command:
        default: 
            execution:
                 timeout:
                     enabled:true
                    isolation: 
                        thread:
                            timeoutInMilliseconds:1000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如上,Hystrix的默认超时时间是1秒。默认开启超时机制。如需关闭Hystrix的超时,可将xxx.enabled设置为false。

    Tips

    如有组件跟Hystrix配合使用,一般来讲,建议Hystrix的超时 > 其他组件的超时,否则将可能导致重试特性失效。

    注:转载自 周立SpringCloud

  • 相关阅读:
    HDU Problem 1811 Rank of Tetris【拓扑排序+并查集】
    POJ Problem 2367 Genealogical tree【拓扑排序】
    HDU Problem 2647 Reward【拓扑排序】
    HDU Problem 1285 确定比赛名次【拓扑排序】
    HDU Problem HDU Today 【最短路】
    HDU Problem 3665 Seaside【最短路】
    HDU Problem 一个人的旅行 【最短路dijkstra】
    HDU Problem 1596 find the safest road【最短路dijkstra】
    Beyond Compare文本合并进行内容替换要注意什么
    用这些工具都可以比较代码的差异
  • 原文地址:https://www.cnblogs.com/lvgg/p/8109396.html
Copyright © 2011-2022 走看看