Java Hystrix在运行时忽略超时
我正在用Hystrix做一点实验 我理解这些文档,因此即使是通过“run”对Hystrix命令的同步调用,默认情况下也会在线程中运行,并且应该遵守Hystrix中配置的超时。但当我尝试时,似乎没有超时 我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获取超时行为? 更具体地说:我有一个“SimpleService”,需要5秒钟才能返回。这被包装在一个超时为500毫秒的Hystrix命令中:Java Hystrix在运行时忽略超时,java,configuration,timeout,hystrix,Java,Configuration,Timeout,Hystrix,我正在用Hystrix做一点实验 我理解这些文档,因此即使是通过“run”对Hystrix命令的同步调用,默认情况下也会在线程中运行,并且应该遵守Hystrix中配置的超时。但当我尝试时,似乎没有超时 我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获取超时行为? 更具体地说:我有一个“SimpleService”,需要5秒钟才能返回。这被包装在一个超时为500毫秒的Hystrix命令中: public class WebRequestCommand extends HystrixCo
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";
}
}
我在5秒后得到结果=>没有超时
如果我这样称呼它:
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.run();
WebRequestCommand webService = new WebRequestCommand(baneService);
result = webService.queue().get();
Hystrix timeout在500毫秒后发生并返回回退。我认为您应该调用execute()而不是run(),以实现同步。只是想知道是否不应该在超类中将“run()”设为“final”以防止此类错误。@BertrandRenuart不起作用,因为您需要在子类中重写它。这里的问题在于
受保护的
可见性,在Java中,它不仅限制对子类的访问,还限制对同一包中其他类的访问。我猜Jens在这里调用的方法与WebRequestCommand属于同一个包的类