本文主要是介绍Dubbo 的集群容错模式:Failsafe Cluster,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
集群容错系列文章:
Failover Cluster 失败自动切换
Failfast Cluster 快速失败,抛出异常
Failsafe Cluster 快速失败,不抛出异常
Failback Cluster 失败后定时重试
Forking Cluster 并行调用多个实例,只要一个成功就返回
Broadcast Cluster 广播调用所有实例,有一个报错则抛出异常
Available Cluster 可用的实例
Mergeable Cluster 合并结果
本文简单介绍 Dubbo 中的 Failsafe Cluster(安全失败)。
简介
调用实例失败后,如果有报错,则忽略掉异常,返回一个正常的空结果。
如何使用
<dubbo:service cluster="failsafe" />
或
<dubbo:reference cluster="failsafe" />
实现逻辑
- 根据负载均衡算法选中被调用实例
- 执行选中的实例
- 执行成功则返回;执行有异常则 catch 异常,然后返回一个正常的空结果
源代码
public class FailsafeClusterInvoker<T> extends AbstractClusterInvoker<T> {private static final Logger logger = LoggerFactory.getLogger(FailsafeClusterInvoker.class);public FailsafeClusterInvoker(Directory<T> directory) {super(directory);}@Overridepublic 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}}
}
做个有梦想的程序猿
这篇关于Dubbo 的集群容错模式:Failsafe Cluster的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!