当前位置: 首页 > 工具软件 > FailSafe.js > 使用案例 >

Dubbo 的集群容错模式:Failsafe Cluster

穆英飙
2023-12-01

本文简单介绍 Dubbo 中的 Failsafe Cluster(安全失败)。

1 简介

调用实例失败后,如果有报错,则忽略掉异常,返回一个正常的空结果。

**2 ** 如何使用

<dubbo:service cluster="failsafe" />

<dubbo:reference cluster="failsafe" />

3 实现逻辑

  1. 根据负载均衡算法选中被调用实例
  2. 执行选中的实例
  3. 执行成功则返回;执行有异常则 catch 异常,然后返回一个正常的空结果

4 源代码

public class FailsafeClusterInvoker<T> extends AbstractClusterInvoker<T> {
    private static final Logger logger = LoggerFactory.getLogger(FailsafeClusterInvoker.class);

    public FailsafeClusterInvoker(Directory<T> directory) {
        super(directory);
    }

    @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) {
            // 有异常时不抛出异常,返回一个 RpcResult 对象
            logger.error("Failsafe ignore exception: " + e.getMessage(), e);
            return new RpcResult(); // ignore
        }
    }
}
 类似资料: