【Dubbo】集群容错

一. 概述

版本:2.7.8

服务提供端因为网络或其它原因导致调用不成功后消费端的处理逻辑

二. Dubbo集群容错模式

Failover Cluster:失败重试

  • 当服务消费方调用服务提供者失败后,会自动切换到其他服务提供者服务器进行重试。
  • 使用<dubbo:reference retries=“2”/>来进行接口级别的重试次数(一共调用三次)

Failfast Cluster:快速失败

  • 当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。

Failsafe Cluster:安全失败

  • 当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。

Failback Cluster:失败自动恢复

  • 当服务消费端调用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。

Forking Cluster:并行调用

  • 当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要其中有一个成功即返回。

Broadcast Cluster:广播调用

  • 当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台服务器调用异常则这次调用就标志失败。
  • 这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。

三. Cluster接口及实现类结构图

在这里插入图片描述

四. 源码解析

1. 接口Cluster

  • 集群容错模式默认为:failover
package org.apache.dubbo.rpc.cluster;

@SPI(Cluster.DEFAULT)
public interface Cluster {
   

    String DEFAULT = FailoverCluster.NAME;

    @Adaptive
    <T> Invoker<T> join(Directory<T> directory) throws RpcException;

    static Cluster getCluster(String name) {
   
        return getCluster(name, true);
    }

    static Cluster getCluster(String name, boolean wrap) {
   
        if (StringUtils.isEmpty(name)) {
   
            name = Cluster.DEFAULT;
        }
        return ExtensionLoader.getExtensionLoader(Cluster.class).getExtension(name, wrap);
    }
}

2. AbstractCluster抽象类

  • 使用模板模式执行公共业务,创建拦截器
  • 各个实现类实现抽象方法(doJoin)
package org.apache.dubbo.rpc.cluster.support.wrapper;

public abstract class AbstractCluster 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值