![](https://img-blog.csdnimg.cn/2020072718442444.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
深度解析dubbo源码
文章平均质量分 94
就是肝源码
$码出未来
~~~
展开
-
深度解析dubbo是怎样将请求序列化的
原创不易,转载请注明出处文章目录前言1.入口2.请求是怎样序列化的总结前言打算用几篇文章解析一下dubbo序列化与反序列化部分,然后结束dubbo源码解析专栏,我们知道dubbo在调用的时候,会先收集调用信息封装到invocation中,到exchange层的时候,将invocation转成Request,在将这个Request交给传输层进行网络传输,其实在传输之前,会将Request序列化成二进制字节,最后交给TCP进行数据的发送,本文主要是介绍下,dubbo是怎样将进行序列化的,也就是怎样将.原创 2021-06-06 17:36:34 · 620 阅读 · 1 评论 -
深度解析dubbo网路传输层ChannelHandler
本文基于dubbo v2.6.x1. ChannelHandlerChannelHandler 是dubbo 对于Channel事件处理的抽象,它抽象了五个事件,分别是连接的时候,断开连接的时候,消息发送完成的时候,接收到消息的时候,发生异常的时候,我们来看下它的定义@SPIpublic interface ChannelHandler { /** * on channel connected. * @param channel channel. */原创 2020-09-16 23:27:16 · 999 阅读 · 0 评论 -
深度解析dubbo网络传输层Channel
本文基于dubbo v2.6.x1. ChannelChannel可以理解为通道,两端传输数据的一个通道。在这里我们介绍的Channel是dubbo的channel,是dubbo对于各种io框架数据通道的封装。它主要提供了操作属性的方法与获取远端地址的方法public interface Channel extends Endpoint { InetSocketAddress getRemoteAddress();//获取远程地址 boolean isConnected();//是否已原创 2020-09-10 21:52:33 · 1972 阅读 · 0 评论 -
深度解析dubbo网络传输层Client
本文基于dubbo v2.6.x1.ClientClient接口是dubbo 网络传输层客户端抽象,主要抽象了reconnect重连方法,同时继承Endpoint ,Channel, Resetable接口,先来看看Client接口定义:Endpoint主要是代表一个端点,可以理解为网络的一端,它抽象了send发送方法,端点关闭方法以及获取该端点的地址信息与channelhandlerChannel是dubbo框架对通道的抽象,它主要是抽象了对通道属性的操作,可以设置,获取,移除属性,同时还可以获原创 2020-09-08 22:57:21 · 1006 阅读 · 0 评论 -
深度解析dubbo网络传输层Server
本文基于dubbo v2.6.x文章目录1.Server2.AbstractServer3.NettyServer1.Server我们在《深度解析dubbo网络传输层Transporter》介绍Transporter的时候,在其实现类中都创建了个对应的Server实现类对象返回,Server是它们的抽象接口,我们来看下Server都抽象了哪些功能public interface Server extends Endpoint, Resetable { /** * is bound.原创 2020-09-02 22:34:11 · 559 阅读 · 0 评论 -
深度解析dubbo网络传输层Transporter
本文基于dubbo v2.6.x1.传输层dubbo网络传输层的一个介绍(dubbo 官方文档:链接):抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec2. TransporterTransporter是一个接口,抽象了客户端连接connect与服务端的端口绑定bind方法。Transporter是dubbo spi一个扩展点,默认实现类为netty,这里这个netty原创 2020-09-01 21:48:10 · 766 阅读 · 0 评论 -
深度解析dubbo信息交换层请求与响应
本文基于dubbo v2.6.x1. ExchangeChannel在《深度解析dubbo信息交换层Exchanger》解析了信息交换层的Exchanger,在解析过程中或多或少的提及到ExchangeChannel,在HeaderExchangeClient中就将client包装成了ExchangeChannel,在HeaderExchangeServer中将channel包装成了ExchangeChannel,Channel字面意思通道,可以将它理解为客户端与服务端的连接。接下来看下Exchange原创 2020-08-31 22:32:09 · 815 阅读 · 0 评论 -
深度解析dubbo信息交换层Exchanger
本文基于dubbo v2.6.x1.信息交换层介绍我们先来看下信息交换层的位置:原创 2020-08-30 21:05:39 · 875 阅读 · 0 评论 -
深度解析dubbo monitor默认实现
本文基于dubbo v2.6.x文章目录1. DubboMonitor原理2. DubboMonitorFactory3. DubboMonitor4. 自己实现一个监控服务1. DubboMonitor原理在《深度解析dubbo monitor(api)》一文中我们解析了dubbo Monitor 与MonitorFactory 的抽象接口,以及继承关系。在本文中我们将讲解下在当前版本的默认实现(也是唯一实现),就是DubboMonitor。 DubboMonitor 的原理就是将收集到的调用指标信原创 2020-08-29 22:08:01 · 1007 阅读 · 0 评论 -
深度解析dubbo过滤器之MonitorFilter
本文基于dubbo v2.6.x1. Monitor与MonitorFilter的关系首先介绍下Monitor,Monitor字面是监控的意思,在dubbo中可以通过Monitor实时监控(不能算是实时,你要是将上报周期缩小可以接近实时)到服务的调用情况(粒度为方法级别),包括请求成功数,请求失败数,吞吐量,当前并发数,响应时长等等。而Monitor这些调用统计指标是MonitorFilter 来采集的,MonitorFilter就相当于咱们的source。当我们配置了monitor,这个Monito原创 2020-08-28 21:18:00 · 1123 阅读 · 0 评论 -
深度解析dubbo monitor(api)
本文基于dubbo v2.6.x1. 监控模块继承关系首先看下监控工厂的继承关系图2.MonitorFactoryMonitorFactory 是monitor工厂抽象,里面提供了一个getMonitor的方法。我们来看下MonitorFactory定义:我们看到MonitorFactory 接口是dubbo spi 的扩展点,而且 getMonitor方法能够根据url的protocol自适应选择对应的实现类,下面是它的继承关系图。2.Monitor与MonitorServiceMon原创 2020-08-27 21:33:15 · 919 阅读 · 0 评论 -
深度解析dubbo zk客户端实现
本文基于dubbo v2.6.x文章目录一、ZookeeperTransporter二、ZookeeperClient三、AbstractZookeeperClient一、ZookeeperTransporterZookeeperTransporter其实就是使用dubbo spi获取zk客户端的接口我们看下它的2个实现类CuratorZookeeperTransporter 与ZkclientZookeeperTransporterZkclientZookeeperTransporter:原创 2020-08-25 22:33:15 · 1439 阅读 · 0 评论 -
深度解析dubbo注册中心zookeeper实现
本文基于dubbo 2.6.x文章目录一、ZookeeperRegistryFactory二、ZookeeperRegistry2.1 class与成员变量2.2 构造2.3 doRegister2.4 doUnregister2.5 doSubscribe2.6 doUnsubscribe三、总结一、ZookeeperRegistryFactoryZookeeperRegistryFactory是注册中心zookeeper工厂的实现,代码比较简单,我们直接来看下。可以看到ZookeeperRe原创 2020-08-24 21:21:15 · 1315 阅读 · 0 评论 -
深度解析dubbo注册中心抽象实现
文章目录一、AbstractRegistryFactory一、AbstractRegistryFactoryAbstractRegistryFactory 是注册中心工厂RegistryFactory接口的抽象实现,首先看下它的class定义:public abstract class AbstractRegistryFactory implements RegistryFactory {...}这个没啥好说的实现RegistryFactory接口,接下来看下静态成员与成员变量// 日志pr原创 2020-08-22 23:21:07 · 665 阅读 · 0 评论 -
深度解析dubbo集群路由之标签路由
本文基于dubbo v2.6.x1.标签路由介绍官方对于标签路由的解释(官方文档地址:链接):一次 dubbo 调用能够根据请求携带的 tag 标签智能地选择对应 tag 的服务提供者进行调用。这个标签路由可以理解为给应用或者是一次调用打标签,然后具有相同标签的会被访问到,如果没有相同标签的服务提供者,你只要没有设置 dubbo.force.tag为true也就是强制使用标签,它就会去标签为null的服务提供者,dubbo管这个操作叫服务降级。其实这个标签路由是dubbo自动装配的,不需要咱们原创 2020-08-20 21:21:56 · 4653 阅读 · 0 评论 -
深度解析dubbo集群路由之脚本路由
本文基于dubbo v2.6.x1.脚本路由介绍脚本路由,顾名思义,就是使用脚本语言进行路由处理,脚本路由规则支持 JDK 脚本引擎的所有脚本,比如:javascript, jruby, groovy 等,通过 type=javascript 参数设置脚本类型,缺省为 javascript。这里拿官网文档上的例子介绍下(官方文档:链接)脚本路由的url示例:"script://0.0.0.0/com.foo.BarService?category=routers&dynamic=false原创 2020-08-19 22:57:01 · 641 阅读 · 0 评论 -
深度解析dubbo集群路由API
本文基于dubbo v2.6.x1. Router介绍原创 2020-08-18 23:40:09 · 942 阅读 · 0 评论 -
深度解析dubbo集群之并发调用与安全失败实现
本文基于dubbo v2.6.x1.介绍本文将解析下dubbo 集群的两个实现,分别是并发请求与安全失败,首先说下这个并发请求,并发请求就是将同一个请求信息使用多线程发送到多个不同的服务提供者上,然后获取第一个响应回来的结果,其实就是并发调用服务提供者们,取最快响应回来的那个结果。再来说下这个安全失败(实在找不到合适的词语),在《深度解析dubbo集群之快速失败与广播调用实现》 一文中,我们讲过快速失败,这个快速失败就是调用一次,如果异常就抛出异常,而这个安全失败与快速失败差不多,不过在异常处理上有差距原创 2020-08-17 21:25:51 · 480 阅读 · 0 评论 -
深度解析dubbo集群之Directory
本文基于dubbo 2.6.x1. DirectoryDirectory 主要是服务调用者获取服务提供者列表的抽象,可以把它原创 2020-08-16 16:11:58 · 1101 阅读 · 0 评论 -
深度解析dubbo集群之失败恢复
本文基于dubbo v2.6.x文章目录1. 介绍2. 配置3. FailbackClusterInvoker 源码解析1. 介绍本文主要讲解dubbo集群失败恢复功能的实现,在文章《深度解析dubbo集群之API》讲解了关于FailbackCluster的源码,在join方法实现中就是创建了一个FailbackClusterInvoker 返回,具体源码看下图:在FailbackClusterInvoker 类中,是对调用过程中失败恢复功能的实现,在这里稍微说下dubbo是怎样做的失败恢复,在服原创 2020-08-15 12:07:08 · 428 阅读 · 0 评论 -
深度解析dubbo集群之快速失败与广播调用实现
本文基于dubbo v2.6.x文章目录1. 介绍2. 配置3. FailfastClusterInvoker源码解析4. BroadcastClusterInvoker源码解析5.总结1. 介绍本文主要是讲解下dubbo集群 快速失败与广播 实现(为了节省文章资源,咱们一块讲解,),首先说下快速失败怎么一回事,比如说服务调用者在进行远程调用的时候,如果出现了异常,它不像我们在《深度解析dubbo集群之失败重试实现》一文中讲解的失败重试一样,而是失败就抛出异常,达到快速失败的效果,其对应的invoke原创 2020-08-15 10:07:13 · 2591 阅读 · 0 评论 -
深度解析dubbo集群之失败重试实现
本文基于dubbo 2.6.x1. 介绍在《深度解析dubbo集群之抽象实现》文中我们讲解了集群invoker的公共抽象类AbstractClusterInvoker,它主要是实现类invoke方法,与select方法(从服务提供者列表中获取一个合适的服务提供者供本次调用),今天我们再来看下它的一个实现类FailoverClusterInvoker,FailoverClusterInvoker类继承AbstractClusterInvoker抽象类,实现了其doInvoke方法,主要是实现类失败重试的功原创 2020-08-14 21:29:45 · 827 阅读 · 0 评论 -
深度解析dubbo集群之抽象实现
本文基于dubbo v2.6.x文章目录1. 介绍2. AbstractClusterInvoker源码解析3. 总结1. 介绍在《深度解析dubbo集群之API》一文中,我们介绍Cluster 接口以及它的实现类与实现类的功能,通过上文学习,我们知道它每个实现类的join方法里面都会创建一个与之功能对应的invoker, 本文我们就来介绍下invoker是怎样实现对应功能的。首先我们先来看看那些invoker的继承关系我们可以看到,它们继承AbstractClusterInvoker 这个抽象类原创 2020-08-13 21:59:31 · 670 阅读 · 0 评论 -
深度解析dubbo集群之API
本文基于dubbo v2.6.x文章目录1. Cluster接口2. Cluster实现类讲解2.1 FailoverCluster2.2 AvailableCluster2.3 BroadcastCluster2.4 FailbackCluster2.5 FailfastCluster2.6 FailsafeCluster2.7 ForkingCluster2.8 MergeableCluster2.9 MockClusterWrapper3.总结1. Cluster接口我们在讲解服务引用com.a原创 2020-08-11 22:02:37 · 875 阅读 · 0 评论 -
深度解析dubbo负载均衡之ConsistentHashLoadBalance
本文基于dubbo v2.6.x文章目录1. 一致性hash2. ConsistentHashLoadBalance源码解析1. 一致性hash在分布式系统中解决负载均衡问题的时候可以使用hash算法来将固定的一部分请求落在同一台机器上,这样每台服务器会固定的处理同一部分请求。来起到负载均衡的作用。但是普通的余数的hash(hash(key)%机器数)算法伸缩性很差,每当新增或者下线机器的时候,某个key与机器的映射会大量的失效,一致性hash则利用hash环对其进行了改进。我们举个例子,比如我现原创 2020-08-09 21:33:30 · 1731 阅读 · 0 评论 -
深度解析dubbo负载均衡之LeastActiveLoadBalance
本文基于dubbo v2.6.x1. 最小活跃数介绍本文主要是讲解dubbo负载均衡的最少活跃数(并发数)算法,在阅读本文之前建议读者学习下这篇文章《深度解析dubbo过滤器之ActiveLimitFilter》了解这个活跃数是怎么来的,当然不了解这个活跃数是怎样算出来的可以,但是需要知道这个活跃数其实就是在当前这个服务调用者中当前这个时刻 某个invoker(某个服务提供者的某个接口)某个方法的调用并发数,在调用之前+1 调用之后-1的一个计数器。其实最少活跃数(并发数)算法字面上来说就是获取那个活跃原创 2020-08-09 18:40:02 · 2015 阅读 · 0 评论 -
深度解析dubbo过滤器之ActiveLimitFilter
本文基于 dubbo v2.6.x文章目录1. actives属性介绍2. 配置使用3. 源码解析1. actives属性介绍我们在调用者端配置dubbo:refrence的时候有一个dubbo调优的参数actives,可以看下官网对这个参数的说明(官方文档:链接):属性对应URL参数类型是否必填缺省值作用描述activesactivesint可选0 表示不做限制性能调优每服务消费者每服务每方法最大并发调用数我这里直接从官网拿过来了,我们可以看下描述这原创 2020-08-08 23:34:34 · 1503 阅读 · 0 评论 -
深度解析dubbo负载均衡之RoundRobinLoadBalance
本文基于dubbo v2.6.x本篇我们将要分析dubbo负载均衡RoundRobinLoadBalance的源码,RoundRobinLoadBalance主要是以轮询的方式来选取invoker,我们直接看下源码:public class RoundRobinLoadBalance extends AbstractLoadBalance { public static final String NAME = "roundrobin"; private static int R原创 2020-08-06 22:31:29 · 2712 阅读 · 2 评论 -
深度解析dubbo负载均衡之RandomLoadBalance
本文基于dubbo v2.6.x今天我们来解读一下dubbo负载均衡算法中的RandomLoadBalance,该算法主要就是从服务列表invokers里面随机选择一个,这个算法也是dubbo默认的负载均衡算法(如果你不配置loadbalance来指定使用哪种算法,将会使用随机算法),当然该算法不仅仅使用random随机一个集合的index,返回index对应invoker,还使用了权重,用权重计算随机。接下来我们来看下RandomLoadBalance源码:public class RandomLo原创 2020-08-05 21:36:05 · 1551 阅读 · 0 评论 -
深度解析dubbo负载均衡之接口
本文基于dubbo v2.6.x1.负载均衡本文我们将解析一下dubbo 集群的负载均衡部分,dubbo的负载均衡属于客户端负载均衡,就是在调用端做的负载,比如一个接口有多个服务提供者实例提供服务,然后我们服务调用端在调用的时候需要选择一个...原创 2020-08-05 21:04:49 · 1046 阅读 · 0 评论 -
深度解析dubbo过滤器之TokenFilter
本文基于dubbo v2.6.x我们首先说下dubbo的令牌验证,咱们这个TokenFilter 过滤器就是与之有关的。1. 令牌验证引用dubbo官方文档的介绍通过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者我们可以了解到,这个token就是防止服务消费者绕过注册中心去访问服务提供者,同时能够使用注册中心进行权限控制。dubbo官网关于token的流程图,我们拿过来分析下:服原创 2020-08-04 21:34:17 · 1476 阅读 · 3 评论 -
深度解析dubbo过滤器之TraceFilter
本文基于dubbo v2.6.x文章目录1. dubbo telnet trace 演示2. TraceFilter解析在讲解TraceFilter 之前我们需要演示一下dubbo telnet 服务治理命令trace。1. dubbo telnet trace 演示如果对dubbo telnet 服务治理命令不熟悉的同学可以去dubbo官网文档学习下:官网文档链接我们这里演示 trace的使用,我们可以使用trace能干什么呢,主要是监听 某个接口的任意方法或者某个方法 n次,然后返回对应的执行原创 2020-08-04 19:00:13 · 2010 阅读 · 0 评论 -
深度解析dubbo过滤器之ExceptionFilter
本文基于dubbo v2.6.x咱们本篇主要是解析下这个ExceptionFilter ,我们先看下ExceptionFilter 的class定义。我们看到ExceptionFilter 的group =provider ,也就是在服务提供者端才激活的Filter,它的内容也很简单,我们可以看下源代码:@Activate(group = Constants.PROVIDER)public class ExceptionFilter implements Filter { private原创 2020-08-04 17:44:40 · 756 阅读 · 0 评论 -
深度解析dubbo过滤器之泛化调用
本文基于dubbo v2.6.x文章目录1. 泛化调用1. 泛化调用什么是泛化调用?我个人的理解是原创 2020-08-03 23:31:07 · 1460 阅读 · 0 评论 -
深度解析dubbo过滤器之TimeoutFilter
本文基于dubbo v2.6.x本篇讲解的TimeoutFilter 超级简单,它的group 组是在服务提供者端,我们可以看下它的源代码:@Activate(group = Constants.PROVIDER)public class TimeoutFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(TimeoutFilter.class); @Overr原创 2020-08-02 11:00:08 · 1172 阅读 · 0 评论 -
深度解析dubbo过滤器之ContextFilter
本文基于dubbo v2.6文章目录1.RpcContext2. 使用RpcContext2.1 公共接口2.2 服务调用者端2.3 服务提供者2.4 测试2.5 这个能干啥3.原理解析1.RpcContextdubbo提供了一个调用上下文用来给服务提供者或者服务调用者传递一些信息,它只会在当前这个调用链上生效,比如说我服务调用者的某个方法中有两个rpc调用,然后分别调用同一个或者不同的服务提供者的某个方法,这个两个rpc调用就会有两个context,你可以往对应的context中塞东西,然后对应的服原创 2020-07-31 23:57:21 · 2559 阅读 · 0 评论 -
深度解析dubbo过滤器之回声测试
本文基于dubbo v2.6.1文章目录1.什么是回声测试2. 回声测试使用2.1 服务提供者编码2.2 服务调用者编码2.3 调用测试3. 原理解析3.1 服务调用者端3.2 服务提供者端1.什么是回声测试我这里引用官方的解释:回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。我们可以看出来这个回声测试其实就是检测服务是否可用的,看看调用是否畅通。2. 回声测试使用我这里使用注解的方式使用一下这个回声测试,如果想了解xml配置的方式可以原创 2020-07-30 22:44:07 · 648 阅读 · 0 评论 -
深度解析dubbo过滤器Filter
本文基于dubbo v2.6.1阅读本篇文章需要有dubbo 服务暴露,服务引用,dubbo spi 机制的基础,如果没有,还请移步《深度解析dubbo源码系列》将这三部分内容吃透,本文在讲解的过程中尽量上下联系起来,造成不适还请谅解。文章目录1. 介绍2. Filter链形成时机2.1 Filter接口2.2 服务提供者2.3 服务调用者2.4 ProtocolFilterWrapper1. 介绍当我们使用服务提供者调用服务提供者的时候,会经过一系列的Filter链,注意,这个Filter链在原创 2020-07-29 21:51:47 · 2381 阅读 · 0 评论 -
深度解析dubbo注册中心(api)
本文基于dubbo v2.6.11.注册中心module预览在2.6版本,注册中心模块是以子项目的形式存在的,我们先来看看dubbo-registry 子项目的目录(加粗黑的的是本版的实现的,其他是高版本实现的)其中 dubbo-registry-api模块主要是定义了注册中心的接口与注册中心Factory,再就是RegistryDirectory与RegistryProtocol类还有一些周边support本篇主要就是介绍注册中心的接口定义2.接口介绍2.1 RegistryService原创 2020-07-27 17:45:56 · 1119 阅读 · 0 评论 -
深度解析dubbo源码系列
以下文章均基于dubbo v2.6.1持续更新中…dubbo spi 扩展技术,框架基石《深度解析dubbo扩展技术dubbo spi(注解)》《深度解析dubbo扩展技术dubbo spi(实现二)》《深度解析dubbo扩展技术dubbo spi(自适应实现)》《深度解析dubbo扩展技术dubbo spi(自动激活实现)》服务暴露《深度解析dubbo服务本地暴露(injvm)》《深度解析dubbo服务远程暴露(一)》《深度解析dubbo服务远程暴露(二)》《深度解析dubbo原创 2020-07-27 16:48:33 · 12543 阅读 · 4 评论