博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud各组件超时总结
阅读量:5286 次
发布时间:2019-06-14

本文共 2303 字,大约阅读时间需要 7 分钟。

Ribbon的超时

  • 全局设置:
ribbon:    ReadTimeout: 60000    ConnectTimeout: 60000
  • 局部设置:
service-id:    ribbon:    ReadTimeout:1000     ConnectTimeout:1000

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

Feign的超时

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

feign:     client:config:        feignName:            connectTimeout:5000 readTimeout:5000

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

RestTemplate的超时

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

@Bean@LoadBalancedpublic RestTemplate restTemplate () {  return new RestTemplate (); }

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

@Bean@LoadBalancedpublic RestTemplate restTemplate () {SimpleClientHttpRequestFactory simpleClientHttpRequestFactory  = new SimpleClientHttpRequestFactory (); simpleClientHttpRequestFactory.setConnectTimeout(1000); simpleClientHttpRequestFactory.setReadTimeout(1000); return new RestTemplate(simpleClientHttpRequestFactory); }

Zuul的超时

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

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

代码解析:此种情况下,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对应的路径。

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

zuul:host:    socket-timeout-millis:10000    connect-timeout-millis:2000

代码解析:直接配置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

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

Tips

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

注:转载自

转载于:https://www.cnblogs.com/xiaobaoTribe/p/9121783.html

你可能感兴趣的文章
找出空的文件夹(OS X)
查看>>
PHP定时执行
查看>>
jTemplates用法
查看>>
Leetcode-Intersection of Two Linked Lists
查看>>
LeetCode-Max Sum of Rectangle No Larger Than K
查看>>
Python:Urllib库使用
查看>>
将时间戳转化为时间格式
查看>>
炉石传说JJC英雄简评 && JJC combo收集:Ver 1.0
查看>>
[LeetCode] First Bad Version
查看>>
Java面向对象编程之异常处理机制
查看>>
Java 学习 day02
查看>>
SQL 关联外键报错类型不匹配
查看>>
虚拟存储管理
查看>>
数据库三范式
查看>>
在 Virtual Box 安装 Mac Os 并安装 Qt 开发应用
查看>>
Investment Guidelines of Crushing Equipment
查看>>
maven <include>与<exclude>划定的范围存在冲突,则以<exclude>配置为准。
查看>>
tar --exclude排除指定目录打包
查看>>
运维笔记之yum,rpm,挂载,磁盘管理和raid详解
查看>>
【转载】Retina屏的移动设备如何实现真正1px的线?
查看>>