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