springboot版本2.2.0.RELEASE
1.feign本身的超时时间
1.feign:
hystrix:
enabled: true
client:
config:
default:
connect-timeout: 1000
read-timeout: 2000
2.熔断超时时间
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 30000000
3.负载超时时间
ribbon:
ReadTimeout: 6000
ConnectTimeout: 2000
测试内容:
1.feign的超时时间和ribbon的超时时间
feign的配置会覆盖掉ribbon的,意思两个都配置的话,以feign设置的超时时间为主(可能与版本有关,测试结果均是基于2.2.0版本,新版本未测试)
ribbon的readTimeout时间指的是从发送到返回来的时间
ribbon会默认重试一次,但是feign超时的设置不会默认重试一次
2.报错返回
第一种:failed and no fallback available
场景1:超过feign或者ribbon的时间返回的错误。虽然没到熔断时间,但是此返回和熔断有关。若关闭熔断,返回的是Read timed out executing GET(超过feign或者ribbon的时间返回的错误)
场景2:还有可能是被调用方已经出错,比如被调用方已经抛出异常
第二种:timed-out and no fallback
超过熔断的时间的返回结果
feign整合了ribbon,开启熔断的:首次调用feign通常会失败,原因是:
熔断hystrix默认的超时时间是1秒,如果接口请求响应超过这个时间,就会报错。spring在装配bean的机制以及懒加载原因,feign的首次请求都会较慢,如果请求超过1秒,就会报错。
一种解决办法:将熔断时间加大
关于feign超时时间是不是 熔断加ribbon的时间和,还未研究;feign超时时间里面的设置源码未研究,疑惑中
以上是自己学习记录,如有错误,烦请指正