之前配置ZuulFilter和Fegin超时时用了相同的配置方法,之前请求时数据量较小,没有出现什么问题。可是今天用Sidecar调用了python的一个服务,这个服务比较耗时,问题就出现了,各种超时,经过问题排查,最终发现之前的理解是错误的。
正确理解:
ZuulFilter和Fegin中有两种超时:
1、ribbon超时(个人理解为路由超时)
2、hystris超时,即熔断器超时
当ribbon超时时会出现,socket read timeout异常,当hystris超时时也会出现常netflix.hystrix.exception.HystrixRuntimeException。
这两种超时要同时满足不超时才不会出现异常。
对于ZuulFilter和Fegin来说,它们设置超时是不一样的
ZuulFilter超时设置方法:
#路由超时,即socket超时设置
ribbon:
ReadTimeout: 600000
ConnectTimeout: 600000
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
#熔断器超时
hystrix:
command:
default:
execution:
timeout:
enabled: false
以上将hystrix超时直接关闭,或者设置时间
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 50000
Fegin设置超时方法:
#避免熔断器超时
feign.hystrix.enabled: false
此处是直接不超时,当然也可以设置超时时间
ribbon:
ReadTimeout: 600000
ConnectTimeout: 600000
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 1
最后 由于春运快到了,给大家安利一个抢火车票的小程序心到抢票,微信扫码关注点击立即抢票即可
个人亲测效率很高,大家也可以加他们官方微信 xdticket 咨询。