有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我认为对于同步方式,应该调用execute()而不是run()