我有一个使用这个外部调用的假客户:
@RequestMapping(method = RequestMethod.GET, value = "GetResourceA", consumes = "application/json")
@Cacheable("ResourceA")
List<Stop> getResourceA() throws MyOwnException;
在我的application.yml
我有这个设置:
hystrix:
command:
default:
execution.isolation.thread.timeoutInMilliseconds: 1000
fallback.enabled: false
现在,如果 getResourceA 超时,即完成时间超过一秒钟,我要么得到这个:
com.netflix.hystrix.exception.HystrixRuntimeException: getResourceA timed-out and no fallback available
或者,如果我定义了一个我自己抛出异常的回退,我会得到:
com.netflix.hystrix.exception.HystrixRuntimeException: getResourceA timed-out and fallback failed.
我不能从后备中抛出自己的异常吗?
如果我想在服务关闭时抛出自己的异常怎么办?我不想有后备(因为我没有从后备返回的合理价值),而是抛出我自己可以捕获的错误并让程序恢复。有人可以帮我解决这个问题吗?
本回答后更新:
所以我尝试了捕获 HysterixRuntimeException 并检查导致它的原因的方法,但最终得到了这个丑陋的代码:
try {
getResourceA();
} catch (HystrixRuntimeException e) {
if (e.getFailureType().name().equals("TIMEOUT")) {
throw new MyOwnException("Service timed out");
}
throw e;
}
所有这些都能够在超时时抛出 MyOwnException。肯定还有别的办法吗?