当hystrix超时时,如何打印时间?

时间:2016-07-21 22:34:12

标签: java hystrix

每当我们的代码抛出一个显示com.netflix.hystrix.exception.HystrixRuntimeException: MyClass timed-out and fallback failed.的异常时,我们总是要猜测问题是否正确配置了Hystrix。我们可以回答这个问题的简单方法是,如果日志表明Hystrix线程在错误之前运行了多长时间。这样,如果它说1000ms,我们知道Hystrix没有正确配置(因为这是默认值),如果它说5000ms,我们就知道它是按照我们想要的方式配置的。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

command.getExecutionTimeInMilliseconds()

此方法告诉您运行方法花了多少秒,要在超时中捕获,可以将其包装在命令类中的try catch中

 @Override
protected HttpResponse run() throws Exception {
    try {
        return executeSomeCall();
    } catch (Exception e) {
        System.out.println(getExecutionTimeInMilliseconds());
        throw e;
    }
}

或在调用之外

try {
        HttpResponse response = command.execute();
        return response;
    }
    catch (HystrixRuntimeException e) {
        command.getExecutionTimeInMilliseconds() // do something with the info
    }

只有一点,如果你使用Threads策略就可以,但是如果你使用Semaphor,超时只会在你得到响应之后发生。即使你的超时是1000毫秒,请求需要5000毫秒。 hystryx将等待5000毫秒来给你一个超时错误,getExecutionTimeInMilliseconds将返回1000毫秒给你。