java Hystrix在运行时忽略超时
我正在用Hystrix做一点实验
我理解这些文档,因此即使是通过“run”对Hystrix命令的同步调用,默认情况下也会在线程中运行,并且应该遵守Hystrix中配置的超时。但当我尝试时,似乎没有超时
我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获得超时行为强>
更具体地说:我有一个“SimpleService”,需要5秒钟才能返回。这被包装在一个超时为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毫秒后发生,并返回回退
# 1 楼答案
我认为对于同步方式,应该调用execute()而不是run()