springcloud微服务使用Feign时Feign、Ribbon、Hystrix超时时间分析
·
ribbon和feign超时时间分析
ribbon和Feign默认超时时间都是1s- 下面是
RibbonClientConfiguration类,里面指明了ribbon的默认连接超时时间和默认读取超时时间都是1s
- 下面是
- 配置方法
feign: # 设置 feign 超时时间 client: config: # default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间 #超时时间默认为1s default: #不设置connectTimeout会导致readTimeout设置不生效 #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间 connectTimeout: 5000 #指建立连接后从服务端读取到可用资源所用的时间 readTimeout: 5000 #设置feign客户端超时时间(OpenFeign默认支持ribbon) ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ConnectTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ReadTimeout: 5000
- 注意:
Feign和Ribbon的超时时间只会有一个生效- 当我们没有显式配饰
feign的超时时间的是时候,如果配置了ribbon的超时时间,则只有这个配置会生效,feign默认的1s超时无效- 如果我们
feign和ribbon的超时时间都配置了,会以feign配置的为准
hystrix超时时间分析
-
hystrix的默认超时时间是 1s,这个配置在HystrixCommandProperties类中:private static final Integer default_executionTimeoutInMilliseconds = 1000; -
配置方法:
# 设置 hystrix 超时时间 feign: hystrix: enabled: true #注意:这个hystrix要单独配置才会生效,不能接着上面的feign里面的hystrix配置,那样是无效的 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 6000
注意:我们如果没有开启
feign的hystrix功能的话那么hystrix的超时时间就不会生效,即有没有配置
feign: hystrix: enabled: true如果配置了
hystrix功能,那么它的超时时间默认就是开启的,且该时间是1秒,这个时间和ribbon的超时时间会同时起作用,不像上面的feign的超时时间和ribbon超时时间二选一,我们可以通过上面的配置hystrix的超时时间让它更长,或者显式禁用hystrix的超时时间:
hystrix: command: default: execution: timeout: #这里表示禁用hystrix的超时时间限制 enabled: false注意:如果我们禁用了
hystrix的超时时间配置,那么我们在方法上用@HystrixCommand里这样配置超时时间也会失效:@HystrixCommand(fallbackMethod = "xxxxx",commandProperties = { @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500") })
- 也就是说这里的1.5s超时配置无效
- 开启
feign的hystrix功能后我们可以通过注解在方法上面配置针对该方法的超时时间,这个时间限制是在上面配置文件之后的,即先判断时间是否超出配置文件中的(没配置就是默认1s),再判断是否超出当前注解里面规定的
@HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = { @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500") })
- 如果注解里面禁用了超时时间配置,那么这里也不会生效
-
再次提醒:
hystrix的超时时间配置和ribbon的超时时间配置是同时生效的-
例如如果我们远程调用另一服务,而另一服务需要运行
3s,那么此时我们如果不想报错,就需要同时配置hystrix和ribbon的超时时间超过3s:#只有在feign中开启了hystrix功能后,hystrix的超时时间才回生效,如果我们压根不使用hystrix的功能就不用配置了 feign: hystrix: enabled: true hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 6000 ribbon: ReadTimeout: 5000 ConectTimeout: 5000
-
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)