源码分析Dubbo Invoker概述----服务发现、集群、负载均衡、路由体系

最后

俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!

另外,给大家安排了一波学习面试资料:

image

image

以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

Invoer的抽象接口,继承自com.alibaba.dubbo.common.Node接口

  • Node:

1、URL getUrl(); 获取URL,在dubbo中,注册中心、服务提供者、服务消费者、监控中心等都使用URL描述。

2、boolean isAvailable() :判断是否可用。

3、void destroy() :资源销毁。

  • Invoker:

1、Class getInterface() :获取服务提供者的接口。

Result invoke(Invocation invocation) throws RpcException :调用服务,返回调用结果。

  • AbstractInvoker Invoker默认实现(模板类)

该方法主要实现public Result invoke(Invocation inv) throws RpcException,定义执行invoker的基础流程(模板),然后根据不同的实现子类(不同的协议)执行各自个性化的执行任务。其抽象方法:protected abstract Result doInvoke(Invocation invocation) throws Throwable,具体实现将在后文中分析。

  • DubboInvoker dubbo协议调用器具体实现。

  • InjvmInvoker injvm协议调用其具体实现(本地协议)

  1. AbstractClusterInvoker 集群模式调用模板类

该类为Dubbo集群模式的调用模板类,主题解决一个服务服务有多个服务提供者,此时消息消费端在调用服务时如何选择具体的服务提供者。该类需要组织多个服务提供者,并按照指定算法选择一服务提供者进行调用。

  • AvailableClusterInvoker

通过< dubbo:service cluster = “available” …/> 或 < dubbo:reference cluster=“available” …/>

集群策略:总是选择第一个可用的服务提供者。

  • BroadcastClusterInvoker

通过< dubbo:service cluster = “broadcast” …/> 或 < dubbo:reference cluster=“broadcast” …/>

集群策略:广播模式,向所有服务提供者都发送请求,任何一个调用失败,则认为失败。

  • FailbackClusterInvoker

通过< dubbo:service cluster = “failback” …/> 或 < dubbo:reference cluster=“failback” …/>

集群策略:服务调用失败后,定时重试,重试次数无线次,重试频率:5s。并不会切换服务提供者。

  • FailfastClusterInvoker

通过< dubbo:service cluster = “failfast” …/> 或 < dubbo:reference cluster=“failfast” …/>

集群策略:服务调用后,快速失败,直接抛出异常,并不重试,也不受retries参数的制约,适合新增、修改类操作。

  • FailoverClusterInvoker

通过< dubbo:service cluster = “failover” …/> 或 < dubbo:reference cluster=“failover” …/>

集群策略:服务调用后,如果出现失败,则重试其他服务提供者,默认重试2次,总共执行3次,重试次数由retries配置,dubbo集群默认方式。

  • FailsafeClusterInvoker

通过< dubbo:service cluster = “failsafe” …/> 或 < dubbo:reference cluster=“failsafe” …/>

集群策略:服务调用后,只打印错误日志,然后直接返回。

  • ForkingClusterInvoker

通过< dubbo:service cluster = “forking” …/> 或 < dubbo:reference cluster=“forking” …/>

集群策略:并发调用多个服务提供者,取第一个返回的结果。可以通过forks设置并发调用的服务台提供者个数。

更多的集群策略,可以参考/dubbo-cluster/src/main/resources/META-/com.alibaba.dubbo.rpc.cluster.Cluster文件。

这里写图片描述

  1. LoadBalance 集群负载算法

当一个服务有多个服务提供者时,消费端在进行服务调用时选择服务服务提供者的负载均衡算法。

LoadBalance定义的接口为:

< T> Invoker select(List< Invoker> invokers, URL url, Invocation invocation) throws RpcException;

  • ConsistentHashLoadBalance

可以通过< dubbo:service loadbalance=“consistenthash” …/>或< dubbo:provider loadbalance = “consistenthash” …/>

负载均衡算法:一致性Hash算法,在AbstractClusterInvoker中从多个服务提供者中选择一个服务提供者时被调用。

  • LeastActiveLoadBalance

可以通过< dubbo:service loadbalance=“leastactive” …/>或< dubbo:provider loadbalance = “leastactive” …/>

负载均衡算法:最小活跃调用。

  • RandomLoadBalance

可以通过< dubbo:service loadbalance=“random” …/>或< dubbo:service loadbalance = “random” …/>

负载均衡算法:随机,如果weight(权重越大,机会越高)

  • RoundRobinLoadBalance

可以通过< dubbo:service loadbalance=“roundrobin” …/>或< dubbo:provider loadbalance = “roundrobin” …/>

负载均衡算法:加权轮询算法。

  1. Directory(目录服务,Invoker的目录服务)

该接口主要的作用是服务提供者的目录服务,管理多个服务提供者。

  • Directory

1、Class< T> getInterface() 获取该服务接口类别。

2、List< Invoker< T>> list(Invocation invocation) throws RpcException 根据调用上下文获取当前所有该服务的服务提供者。

4.2 AbstractDirectory 目录服务实现的抽象列(模板类)

4.3 StaticDirectory 静态目录服务

所谓静态目录服务就是在创建StaticDirectory时指定一个服务提供者集合,则该目录服务实例在其生命周期中,只会返回这些服务提供者。

最后

金三银四到了,送上一个小福利!

image.png

image.png

专题+大厂.jpg

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值