注: Dubbo版本是2.6.2
图1 Dubbo的FailsafeClusterInvoker类继承图
Failsafe可以理解为出现异常时,直接忽略。可以用在类似写日志之类的,允许一定量信息丢失的地方。
核心代码在FailsafeClusterInvoker的doInvoke(Invocation,List<Invoker<T>>,LoadBalance)中,源码如下。
@Override
public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
try {
checkInvokers(invokers, invocation);
Invoker<T> invoker = select(loadbalance, invocation, invokers, null);
return invoker.invoke(invocation);
} catch (Throwable e) {
logger.error("Failsafe ignore exception: " + e.getMessage(), e);
return new RpcResult(); // ignore
}
}
比较好理解,重点在于不抛出底层的异常。
(adsbygoogle = window.adsbygoogle || []).push({});