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

相關文章
相關標籤/搜索