一、说明
@HystrixCommand 注解 能对某个一个接口定制 Hystrix的超时时间。
通过修改 execution.isolation.thread.timeoutInMilliseconds 属性可以设置超时时间,
通过设置 fallbackMethod 可以设置超时后响应的格式
二、示例
@HystrixCommand(fallbackMethod = "sleepFallback", commandProperties =
{
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "900")
})
@PostMapping("/sleep")
public ResultBean test(@RequestParam(value = "sleep") Integer sleep) throws InterruptedException {
log.info("开始睡眠" + sleep + "毫秒");
Thread.sleep(sleep);
log.info("睡眠结束...");
return ResultBean.result("请求结束!");
}
private ResultBean sleepFallback(Integer sleep) {
return ResultBean.result(Code.REQUEST_TIME_OUT.getCode(), "请求超时,请稍后重试。");
}
三、注意事项
① 设置 fallbackMethod 指定的 返回值方法类型要跟目标方法一致,否则将报错。
② 如果方法内部有明显的异常,将不走目标方法,直接返回 fallback 方法的返回值。
@HystrixCommand(fallbackMethod = "sleepFallback", commandProperties =
{
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
})
@PostMapping("/sleep2")
public ResultBean test02(@RequestParam(value = "sleep") Integer sleep) throws InterruptedException {
log.info("开始睡眠" + sleep + "毫秒");
String s = null;
s.trim();//编译通过,但明显空指针异常
int i = 1 / 0;编译通过,但明显算术异常
Thread.sleep(sleep);
log.info("睡眠结束...");
return ResultBean.result("请求结束!");
}
③ 如果@HystrixCommand 注解同时指定了目标方法的 timeoutInMilliseconds,同时又在配置文件 application.yml 中配置了hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds ,甚至设置了Ribbon.ReadTimeout
那么,超时时间最小的将生效。
版权声明:本文为qq_26820793原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。