集群容错系列文章:
Failover Cluster 失败自动切换
Failfast Cluster 快速失败,抛出异常
Failsafe Cluster 快速失败,不抛出异常
Failback Cluster 失败后定时重试
Forking Cluster 并行调用多个实例,只要一个成功就返回
Broadcast Cluster 广播调用所有实例,有一个报错则抛出异常
Available Cluster 可用的实例
Mergeable Cluster 合并结果
本文简单介绍 Dubbo 中的 Available Cluster(可用的实例)。
简介
调用目前可用的实例(只调用一个),如果当前没有可用的实例,则抛出异常。
如何使用
<dubbo:service cluster="available" />
或
<dubbo:reference cluster="available" />
实现逻辑
- 遍历所有的实例
- 遍历到第一个可用的实例,调用该实例
- 如果没有可用的实例,则抛出异常
源代码
public class AvailableClusterInvoker<T> extends AbstractClusterInvoker<T> {
public AvailableClusterInvoker(Directory<T> directory) {
super(directory);
}
@Override
public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
// 调用所有可用的实例
for (Invoker<T> invoker : invokers) {
if (invoker.isAvailable()) {
// 实例可用则调用
return invoker.invoke(invocation);
}
}
// 如果没有可用的实例,则抛出异常
throw new RpcException("No provider available in " + invokers);
}
}
做个有梦想的程序猿
![个人公众号](https://i-blog.csdnimg.cn/blog_migrate/851d84ee1e21a8a05c65072bc4bf6fc8.jpeg)