Hystrix 忽略运行超时
Hystrix ignores timeout on run
我正在尝试使用 Hystrix。
我理解文档,即使是通过 'run' 对 Hystrix 命令的同步调用也默认在线程中运行,并且应该受制于 Hystrix 中配置的超时。但是当我尝试时,似乎没有超时。
我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获得超时行为?
更具体:我有一个 'SimpleService' 需要 5 秒才能 return。这包含在超时为 500 毫秒的 Hystrix 命令中:
public class WebRequestCommand extends HystrixCommand<String> {
private final SimpleService baneService;
protected WebRequestCommand(SimpleService baneService) {
super(
Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test"))
.andCommandPropertiesDefaults(
HystrixCommandProperties.Setter()
.withExecutionIsolationThreadTimeoutInMilliseconds(500)));
this.baneService = baneService;
}
@Override
protected String run() {
return baneService.connectToBane();
}
@Override
protected String getFallback() {
return "SERVICE NOT AVAILABLE";
}
}
如果我这样称呼它:
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.run();
我在 5 秒后得到结果 => 没有超时
如果我这样称呼它:
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.queue().get();
Hystrix 超时发生在 500 毫秒后 return 回退。
我认为您应该以同步方式调用 execute() 而不是 运行()。
我正在尝试使用 Hystrix。
我理解文档,即使是通过 'run' 对 Hystrix 命令的同步调用也默认在线程中运行,并且应该受制于 Hystrix 中配置的超时。但是当我尝试时,似乎没有超时。
我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获得超时行为?
更具体:我有一个 'SimpleService' 需要 5 秒才能 return。这包含在超时为 500 毫秒的 Hystrix 命令中:
public class WebRequestCommand extends HystrixCommand<String> {
private final SimpleService baneService;
protected WebRequestCommand(SimpleService baneService) {
super(
Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("test"))
.andCommandPropertiesDefaults(
HystrixCommandProperties.Setter()
.withExecutionIsolationThreadTimeoutInMilliseconds(500)));
this.baneService = baneService;
}
@Override
protected String run() {
return baneService.connectToBane();
}
@Override
protected String getFallback() {
return "SERVICE NOT AVAILABLE";
}
}
如果我这样称呼它:
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.run();
我在 5 秒后得到结果 => 没有超时
如果我这样称呼它:
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.queue().get();
Hystrix 超时发生在 500 毫秒后 return 回退。
我认为您应该以同步方式调用 execute() 而不是 运行()。