Dubbo集群容错模式之Failsafe实现

注: Dubbo版本是2.6.2java

                       

                                               图1 Dubbo的FailsafeClusterInvoker类继承图ide

1.Failsafe的含义

    Failsafe能够理解为出现异常时,直接忽略。能够用在相似写日志之类的,容许必定量信息丢失的地方。spa

2.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
    }
}
  • 首先根据loadbalance从服务提供者列表中选取一个。
  • 以后调用服务提供者的服务,若是调用成功,则直接返回结果;若是调用失败,则用error级别的日志记录exception,可是不抛出异常,以后返回一个默认值。

    比较好理解,重点在于不抛出底层的异常。code

相关文章
相关标签/搜索