Dubbo
文章平均质量分 94
Dubbo底层运行原理
xianghan收藏册
专注于Java方向的架狗师
展开
-
15-Dubbo服务调用过程源码分析-服务提供方响应请求
服务提供方调用指定服务后,会将调用结果封装到 Response 对象中,并将该对象返回给服务消费方。服务提供方也是通过 NettyChannel 的 send 方法将 Response 对象返回。本节仅需关注 Response 对象的编码过程即可,直接分析具体的编码逻辑。......原创 2022-08-11 22:16:19 · 159 阅读 · 0 评论 -
14-Dubbo服务调用过程源码分析-服务提供方接收请求
最后调用 decodeBody 方法进行后续的解码工作,ExchangeCodec 中实现了 decodeBody 方法,但因其子类 DubboCodec 覆写了该方法,所以在运行时 DubboCodec 中的 decodeBody 方法会被调用。接下来继续向后分析,把剩余的调用过程分析完。ChannelEventRunnable 仅是一个中转站,它的 run 方法中并不包含具体的调用逻辑,仅用于将参数传给其他 ChannelHandler 对象进行处理,该对象类型为 DecodeHandler。...原创 2022-08-11 22:14:14 · 456 阅读 · 0 评论 -
13-Dubbo服务调用过程源码分析-服务消费方发送请求
ReferenceCountExchangeClient 内部仅实现了一个引用计数的功能,其他方法并无复杂逻辑,均是直接调用被装饰对象的相关方法。Dubbo 数据包分为消息头和消息体,消息头用于存储一些元信息,比如魔数(Magic),数据包类型(Request/Response),消息体长度(Data Length)等。消息体中用于存储具体的调用消息,比如方法名称,参数列表等。首先定义了一个 Request 对象,然后再将该对象传给 NettyClient 的 send 方法,进行后续的调用。...原创 2022-08-10 23:50:40 · 309 阅读 · 0 评论 -
12-Dubbo服务调用过程-服务调用方式
这样当用户线程调用 Future 的 get 方法时,经过 FutureAdapter 适配,最终会调用 ResponseFuture 实现类对象的 get 方法,也就是 DefaultFuture 的 get 方法。Dubbo 支持同步和异步两种调用方式,其中异步调用还可细分为“有返回值”的异步调用和“无返回值”的异步调用。首先将运行时参数存储到数组中,然后调用 InvocationHandler 接口实现类的 invoke 方法,得到调用结果,最后将结果转型并返回给调用方。...原创 2022-08-10 23:46:15 · 1693 阅读 · 0 评论 -
11-Dubbo架构设计与底层原理-集群容错之 LoadBalance
LoadBalance 负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载的服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡还是能够接触到一些的,比如 Nginx。在 Dubbo 中,也有负载均衡的概念和相应的实现。Dubbo 需要对服务消费者的调用请求进原创 2022-08-05 06:32:32 · 152 阅读 · 0 评论 -
10-Dubbo架构设计与底层原理-集群容错之 Router
第二次循环:分隔符 separator = “=”,content = “2.2.2.2”,pair = MatchPair@123。第六次循环:分隔符 separator = “=”,content = “2.2.2.2”,pair = MatchPair@456。以上就是 isMatchGlobPattern 两个重载方法的全部逻辑,这两个方法分别对普通的匹配,以及”引用消费者参数“和通配符匹配做了支持。...原创 2022-08-05 06:30:54 · 115 阅读 · 0 评论 -
9-Dubbo架构设计与底层原理-集群容错之 Directory
Dubbo 集群容错方面的源码,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。在一个服务集群中,服务提供者数量并不是一成不变的,如果集群中新增了一台机器,相应地在服务目录中就要新增一条服务提供者记录。或者,如果服务提供者的配置修改了,服务目录中的记原创 2022-08-05 06:29:24 · 121 阅读 · 0 评论 -
8-Dubbo架构设计与底层原理-服务引用(下)
在Dubbo中,可以通过两种方式引用远程服务。第一种是使用服务直联的方式引用服务,第二种方式是基于注册中心进行引用。服务直联的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历Invoker创建、代理类创建等步骤。...原创 2022-08-01 21:19:25 · 167 阅读 · 0 评论 -
7-Dubbo架构设计与底层原理-服务引用源码分析(上)
接着根据收集到的信息决定服务引用的方式,有三种,第一种是引用本地(JVM)服务,第二是通过直联方式引用远程服务,第三是通过注册中心引用远程服务。Dubbo服务引用的时机有两个,第一个是在Spring容器调用ReferenceBean的afterPropertiesSet方法时引用服务,第二个是在ReferenceBean对应的服务被注入到其他类中时引用。这两个引用服务的时机区别在于,第一个是饿汉式的,第二个是懒汉式的。Dubbo提供了丰富的配置,用于调整和优化框架行为,性能等。......原创 2022-08-01 21:17:17 · 124 阅读 · 0 评论 -
6-Dubbo架构设计与底层原理-服务导出源码分析(下)
这里的zookeeperTransporter类型为自适应拓展类,因此connect方法会在被调用时决定加载什么类型的ZookeeperTransporter拓展,默认为CuratorZookeeperTransporter。服务注册操作对于Dubbo来说不是必需的,通过服务直连的方式就可以绕过注册中心。这里的createRegistry是一个模板方法,由具体的子类实现。register方法包含两步操作,第一步是获取注册中心实例,第二步是向注册中心注册服务。......原创 2022-07-29 23:06:48 · 126 阅读 · 0 评论 -
5-Dubbo架构设计与底层原理-服务导出源码分析(中)
分割线2和分隔线3之间的代码用于为定义在当前类中的方法生成判断语句,和方法调用语句。在创建Wrapper子类的过程中,子类代码生成逻辑会对getWrapper方法传入的Class对象进行解析,拿到诸如类方法,类成员变量等信息。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。服务导出,分为导出到本地(JVM),和导出到远程。...原创 2022-07-29 23:05:36 · 176 阅读 · 0 评论 -
4-Dubbo架构设计与底层原理-服务导出源码分析(上)
延迟导出的入口是ServiceBean的afterPropertiesSet方法,立即导出的入口是ServiceBean的onApplicationEvent方法。导出到远程的过程则要复杂的多,以dubbo协议为例,DubboProtocol类的export方法将会被调用。注意这里的isDelay方法,这个方法字面意思是“是否延迟导出服务”,返回true表示延迟导出,false表示不延迟导出。第二是导出服务,包含导出服务到本地(JVM),和导出服务到远程两个过程。......原创 2022-07-29 23:03:25 · 241 阅读 · 0 评论 -
3-Dubbo架构设计与底层原理-自适应拓展原理
Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并非想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,就无法进行加载,这似乎是个死结。不过好在也有相应的解决办法,通过代理模式就可以解决这个问题,这里将具有代理功能的拓展称之为自适应拓展。Dubbo 并未直接通过代理模式实现自适应拓展,而是代理模式基础上,封装了一个更炫的原创 2022-07-27 21:21:18 · 117 阅读 · 0 评论 -
2-Dubbo架构设计与底层原理-SPI源码分析
SPI全称为ServiceProviderInterface,是Java提供的一种服务发现机制。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过SPI机制为我们的程序提供拓展功能。SPI机制在第三方框架中也有所应用,比如Dubbo就是通过SPI机制加载所有的组件。不过,Dubbo并未使用Java原生的SPI机制,而是对其进行了增强,使其能够更好的满足需求。......原创 2022-07-27 08:04:54 · 184 阅读 · 0 评论 -
1-Dubbo架构设计与底层原理-架构设计
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。...原创 2022-07-25 07:43:48 · 197 阅读 · 0 评论