正如文档中所说,Hystrix-documentation getFallback()
方法将在以下情况下被抛出:
- 每当命令执行失败时:construct() 或 run() 抛出异常时
- 当命令因为电路开路而短路时
- 当命令的线程池和队列或信号量已满时
- 当命令超过其超时长度时。
因此,您可以通过将执行异常分配给Throwable 对象轻松获取引发您调用的回退方法的原因。
假设您的 HystrixCommand 返回一个字符串
public class ExampleTask extends HystrixCommand<String> {
//Your class body
}
执行以下操作:
@Override
protected ErrorCodes getFallback() {
Throwable t = getExecutionException();
if (circuitBreaker.isOpen()) {
// Log or something
} else if (t instanceof RejectedExecutionException) {
// Log and get the threadpool name, could be useful
} else {
// Maybe something else happened
}
return "A default String"; // Avoid using any HTTP request or ypu will need to wrap it also in HystrixCommand
}
更多信息在这里