前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Dubbo 的集群容错模式:Failfast Cluster

Dubbo 的集群容错模式:Failfast Cluster

作者头像
LieBrother
发布于 2019-04-02 08:21:55
发布于 2019-04-02 08:21:55
2K00
代码可运行
举报
文章被收录于专栏:LieBrotherLieBrother
运行总次数:0
代码可运行

本文简单介绍 Dubbo 中的 Failfast Cluster。

1

简介

调用实例失败后,如果有报错,则直接抛出异常。

2

如何使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dubbo:service cluster="failfast" />

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dubbo:reference cluster="failfast" />

3

实现逻辑

  1. 根据负载均衡算法选中被调用实例
  2. 执行选中的实例
  3. 执行成功则返回;执行有异常则直接抛出异常,不进行重试等操作

4

实现代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FailfastClusterInvoker<T> extends AbstractClusterInvoker<T> {

    public FailfastClusterInvoker(Directory<T> directory) {
        super(directory);
    }

    @Override
    public Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException {
        checkInvokers(invokers, invocation);
        // 选择调用实例
        Invoker<T> invoker = select(loadbalance, invocation, invokers, null);
        try {
            // 执行调用
            return invoker.invoke(invocation);
        } catch (Throwable e) {
            // 如果有异常则直接抛出异常
            if (e instanceof RpcException && ((RpcException) e).isBiz()) { // biz exception.
                throw (RpcException) e;
            }
            throw new RpcException(e instanceof RpcException ? ((RpcException) e).getCode() : 0, "Failfast invoke providers " + invoker.getUrl() + " " + loadbalance.getClass().getSimpleName() + " select from all providers " + invokers + " for service " + getInterface().getName() + " method " + invocation.getMethodName() + " on consumer " + NetUtils.getLocalHost() + " use dubbo version " + Version.getVersion() + ", but no luck to perform the invocation. Last error is: " + e.getMessage(), e.getCause() != null ? e.getCause() : e);
        }
    }
}

做个有梦想的程序猿

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LieBrother 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊dubbo-go的failfastCluster
dubbo-go-v1.4.2/cluster/cluster_impl/failfast_cluster.go
code4it
2020/08/06
2940
聊聊dubbo-go的failfastCluster
聊聊dubbo的FailfastClusterInvoker
dubbo-2.7.3/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/FailfastClusterInvoker.java
code4it
2019/08/23
4000
聊聊dubbo的FailfastClusterInvoker
Dubbo集群容错模式之Failfast实现 原
                                                  图1 Dubbo的FailfastClusterInvoker类继承图
克虏伯
2019/04/15
1.2K0
Dubbo集群容错模式之Failfast实现
                                                                            原
dubbo学习(九)集群容错策略
(1)生成Invoker对象。不同的Cluster实现会生成不同类型的ClusterInvoker对象并返回。然后调用ClusterInvoker的invoker方法,开始正式进入集群容错流程中。
虞大大
2020/11/06
5430
Dubbo集群容错模式之Failover实现 原
                                                     图1 Dubbo的FailoverClusterInvoker类继承图
克虏伯
2019/04/15
8380
Dubbo集群容错模式之Failover实现
                                                                            原
源码分析Dubbo集群策略
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制(LoadBalance),本节将重点分析集群容错机制(AbstractClusterInvoker)。整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析AbstractClusterInvoker是如何融合这些组件的。
丁威
2019/06/10
5560
源码分析Dubbo集群策略
Dubbo 的集群容错模式:Failover Cluster
本文简单介绍 Dubbo 中的 Failover Cluster(失败自动切换)。
LieBrother
2019/04/02
1.2K0
dubbo集群容错策略的代码分析2
接上篇 https://cloud.tencent.com/developer/article/1109572 dubbo版本2.5.3 dubbo本身集群容错策略有7种。都实现了Cluster接口(
技术蓝海
2018/04/26
2K0
dubbo集群容错策略的代码分析2
Dubbo:集群容错的实现
前两篇中,我们看到了dubbo在负载均衡和服务路由方面的实现,它为集群功能提供了必要的功能。
烂猪皮
2022/12/16
1K0
Dubbo:集群容错的实现
dubbo源码解析——cluster
将 Directory 中的多个 Invoker 伪装成一个 Invoker(伪装过程用到loadBalance),对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。简单来说,就是应对出错情况采取的策略。看看这个接口:
用户5325874
2020/01/16
4300
dubbo源码解析——cluster
Dubbo集群容错模式之Forking实现 原
                                                        图1 Dubbo的ForkingClusterInvoker类继承图
克虏伯
2019/04/15
7580
Dubbo集群容错模式之Forking实现
                                                                            原
动态指定IP调用Dubbo服务
前面我们探讨了如何获取某一个Dubbo的服务的提供者列表,本节我们探讨如何使用Dubbo的扩展,实现指定IP调用。
加多
2019/05/15
4.8K1
Dubbo 源码分析 - 集群容错之 Cluster
为了避免单点故障,现在的应用至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多台服务器。这样,同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及及 Cluster Invoker。集群 Cluster 用途是将多个服务提供者合并为一个 Cluster Invoker,并将这个 Invoker 暴露给服务消费者。这样一来,服务消费者只需通过这个 Invoker 进行远程调用即可,至于具体调用哪个服务提供者,以及调用失败后如何处理等问题,现在都交给集群模块去处理。集群模块是服务提供者和服务消费者的中间层,为服务消费者屏蔽了服务提供者的情况,这样服务消费者就可以处理远程调用相关事宜。比如发请求,接受服务提供者返回的数据等。这就是集群的作用。
田小波
2018/12/17
7330
Dubbo 源码分析 - 集群容错之 Cluster
Dubbo 的集群容错模式:Failsafe Cluster
本文简单介绍 Dubbo 中的 Failsafe Cluster(安全失败)。 1 简介 调用实例失败后,如果有报错,则忽略掉异常,返回一个正常的空结果。 2 如何使用 <dubbo:service cluster="failsafe" /> 或 <dubbo:reference cluster="failsafe" /> 3 实现逻辑 根据负载均衡算法选中被调用实例 执行选中的实例 执行成功则返回;执行有异常则 catch 异常,然后返回一个正常的空结果 4 源代码 public class F
LieBrother
2019/04/02
7000
聊聊dubbo的ForkingClusterInvoker
dubbo-2.7.3/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ForkingClusterInvoker.java
code4it
2019/08/27
5200
dubbo源码解析——服务调用过程
本文中,将进入消费端源码解析(具体逻辑会放到代码的注释中)。本文先是对消费过程的总体代码逻辑理一遍,个别需要细讲的点,后面会专门的文章进行解析。
用户5325874
2020/01/16
4360
聊聊dubbo的Invoker select
dubbo-2.7.1-sources.jar!/org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java
code4it
2019/06/16
6180
聊聊dubbo的Invoker select
聊聊dubbo的ForkingClusterInvoker
dubbo-2.7.3/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/ForkingClusterInvoker.java
code4it
2019/08/22
5400
聊聊dubbo的ForkingClusterInvoker
Dubbo集群容错模式之Broadcast实现
                                                图1 Dubbo的BroadcastClusterInvoker类继承图
克虏伯
2019/04/15
1.9K0
Dubbo集群容错模式之Broadcast实现
dubbo集群容错机制代码分析1
dubbo版本2.5.3 我们这里以zookeeper作为注册中心为例说明。 这里说的集群,可以理解为,一个接口服务对应有多个提供者。 在dubbo的调用方(reference)看来,每个提供方(service)对应一个invoker。 关于一个调用方对应多个提供方的场景大概包括三大类: 1,者调者订阅一个注册中心,此注册中心,同一个服务有多个提供者(以不同机器,端口,版本等发布的服务) 2,者调者订阅多个注册中心的服务,每个注册中心都有引用的服务的提供者(一个或者多个)。 3,调用方,通过url
技术蓝海
2018/04/26
1.1K0
相关推荐
聊聊dubbo-go的failfastCluster
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验