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