Dubbo 的集群容错模式:Available Cluster

集群容错系列文章:
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" />

实现逻辑

  1. 遍历所有的实例
  2. 遍历到第一个可用的实例,调用该实例
  3. 如果没有可用的实例,则抛出异常

源代码

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);
    }

}


做个有梦想的程序猿
个人公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值