@HystrixCommand 注解的作用与注意事项
程序员文章站
2024-03-20 22:19:04
...
一、说明
@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
那么,超时时间最小的将生效。
上一篇: 微服务架构
下一篇: 由浅入深讲解动态类函数指针
推荐阅读
-
@HystrixCommand 注解的作用与注意事项
-
Spring注解驱动开发第5讲——使用@Scope注解设置组件的作用域
-
JSch的使用与加载.ppk文件的注意事项
-
Android中Gson解析json数据使用@SerializedName注解与java对象不匹配的字段
-
java 注解的几大作用及使用方法详解(完) 博客分类: 编程语言 注解 java 注解
-
java 注解的几大作用及使用方法详解(完) 博客分类: 编程语言 注解 java 注解
-
java6的@override注解与java5的不同之处 JavaOO
-
java6的@override注解与java5的不同之处 JavaOO
-
浅谈Java枚举的作用与好处
-
Java中volatile关键字的作用与用法详解