今天在做熔断测试的时候 , 关闭 auth 服务 发现 zuul 抛出了一个调用超时的错误 。
com.netflix.zuul.exception.ZuulException: Hystrix Readed time out
不应该啊 , 这个时候不应该是熔断了么 。返回我降级的数据 。(如下) 但是发现并没有
{
"resultCode": "000000",
"resultMsg": "操作成功",
"data": [
{
"id": null,
"menuId": null,
"userId": null,
"menuCode": "权限模块调用失败降级返回"
}
]
}
不应该啊 。
原因 :
zuul 的默认超时时间是 1000ms feign 的默认超时时间是 1s 所以必定的 zuul 先超时 feign才会进行降级操作
解决方法
zuul 设置超时时间 , 并且这个超时时间 要大于 feign的超时时间 。
# zuul 设置超时时间
# 设置zuul的超时时间 , 需要同时设置 ribbon 的 应为zuul 默认是 由 ribbon 实现的
# 注意ribbon的超时时间要小于zuul超时时间 。
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
feign 的超时时间设置
# 申明 服务降级
feign:
hystrix:
enabled: true
# 设置 feign 的超时时间 超过 5s 进行降级返回
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
我看到有另一种设置方式的 feign 官网 也是这样的(如下)但不知道为什么会没有效果 , 希望有大神看到能解答一下 。自己也要多去找一下问题
feign:
client:
config:
default:
connectTimeout: 10000
readTimeout: 10000