本文简单介绍 Dubbo 中的 Failsafe Cluster(安全失败)。
1 简介
调用实例失败后,如果有报错,则忽略掉异常,返回一个正常的空结果。
**2 ** 如何使用
<dubbo:service cluster="failsafe" />
或
<dubbo:reference cluster="failsafe" />
3 实现逻辑
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
}
}
}