- 博客(15)
- 收藏
- 关注
原创 DUBBO源码应用总结十三---服务调用过程
"2021SC@SDUSC"1. 什么是远程过程调用在讲述 Dubbo 的服务调用过程之前,让我们先来了解一下什么是远程过程调用。远程过程调用即 Remote Producedure Call,简单来说就是跨进程调用,通过网络传输,使得 A 机器上的应用可以像调用本地的服务一样去调用 B 机器上的服务。举个最简单的栗子,假设现在有一个电商系统,其中有着用户服务,优惠券服务,订单服务等服务模块,这些不同的服务并不是运行在同一个 JVM 中,而是分开运行在不同的 JVM 中。因此,当订单服务想要
2021-12-22 21:02:50
1266
原创 DUBBO用法总结十二——服务引用
"2021SC@SDUSC"如果没有Rpc框架,我们需要网络编程代码调用远程服务,同时对于请求参数和响应结果需要手动进行序列化和反序列化。这些过程对于没有接触过网络编程的程序员来说有一定的难度。Dubbo服务引用的目的就是将远程调用的网络编程隐藏在框架当中,让程序员像调用本地服务一样调用远程服务。Dubbo提供的功能不仅如此,同时提供了服务发现,集群容错,负载均衡,服务降级等功能。如下图是dubbo服务引用的整体流程,在引用服务时,dubbo首先会从注册中心获取注册服务的url信息,并利用proto
2021-12-22 21:00:07
1358
原创 DUBBO用法总结十一——服务导出
"2021SC@SDUSC"一、前言如果没有Rpc框架,我们需要网络编程代码调用远程服务,同时对于请求参数和响应结果需要手动进行序列化和反序列化。这些过程对于没有接触过网络编程的程序员来说有一定的难度。Dubbo服务引用的目的就是将远程调用的网络编程隐藏在框架当中,让程序员像调用本地服务一样调用远程服务。Dubbo提供的功能不仅如此,同时提供了服务发现,集群容错,负载均衡,服务降级等功能。如下图是dubbo服务引用的整体流程,在引用服务时,dubbo首先会从注册中心获取注册服务的url信息,并利
2021-12-06 12:06:55
867
原创 DUBBO源码分析十---服务目录
"2021SC@SDUSC"1. 简介本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。这几个部分的源码逻辑相对比较独立,我们将会分四篇文章进行分析。本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码。在进行深入分析之前,我们先来了解一下服务目录是什么。服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者
2021-12-06 12:00:54
189
原创 DUBBO源码分析九---服务调用过程 总结
"2021SC@SDUSC"3. 总结本篇文章主要对 Dubbo 中的几种服务调用方式,以及从双向通信的角度对整个通信过程进行了详细的分析。按照通信顺序,通信过程包括服务消费方发送请求,服务提供方接收请求,服务提供方返回响应数据,服务消费方接收响应数据等过程。理解这些过程需要大家对网络编程,尤其是 Netty 有一定的了解。限于篇幅原因,本篇文章无法将服务调用的所有内容都一一进行分析。对于本篇文章未讲到或未详细分析的内容,比如服务降级、过滤器链、以及序列化等。大家若感兴趣,可自行进行分析。并将分析整
2021-12-06 11:57:21
398
原创 DUBBO源码分析八---服务调用过程
"2021SC@SDUSC"2.3.2.2 调用服务本小节,我们从 ChannelEventRunnable 开始分析,该类的主要代码如下:public class ChannelEventRunnable implements Runnable { private final ChannelHandler handler; private final Channel channel; private final ChannelState state;
2021-12-06 11:55:59
2037
原创 DUBBO源码分析七---服务调用过程
"2021SC@SDUSC"2.2.2 请求编码在分析请求编码逻辑之前,我们先来看一下 Dubbo 数据包结构。Dubbo 数据包分为消息头和消息体,消息头用于存储一些元信息,比如魔数(Magic),数据包类型(Request/Response),消息体长度(Data Length)等。消息体中用于存储具体的调用消息,比如方法名称,参数列表等。下面简单列举一下消息头的内容。偏移量(Bit) 字段 取值 0 ~ 7 魔数高位 0xda00 8 ~ 15
2021-11-24 17:45:06
1237
原创 DUBBO源码分析七---服务调用过程
"2021SC@SDUSC"1. 简介在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。本篇文章将会重点分析请求的发送与接收、编解码、线程派发以及响应的发送与接收等过程,至于服务降级、过滤器链和序列化大家自行进行分析,也可以
2021-11-24 17:42:03
992
原创 DUBBO源码分析六---服务引用
"2021SC@SDUSC"3.2.2 创建代理Invoker 创建完毕后,接下来要做的事情是为服务接口生成代理对象。有了代理对象,即可进行远程调用。代理对象生成的入口方法为 ProxyFactory 的 getProxy,接下来进行分析。如上,上面大段代码都是用来获取 interfaces 数组的,我们继续往下看。getProxy(Invoker, Class<?>[]) 这个方法是一个抽象方法,下面我们到 JavassistProxyFactory 类中看一下该方法的实现代.
2021-11-08 22:32:38
296
原创 DUBBO源码分析五---服务引用
"2021SC@SDUSC"1. 简介上一篇文章详细分析了服务导出的过程,本篇文章我们趁热打铁,继续分析服务引用过程。在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历 Invoker 创建、代理类创建等步骤。这些步骤,将在后续
2021-11-08 22:29:16
183
原创 DUBBO源码分析四---服务导出
"2021SC@SDUSC"2.2.4 服务注册本节我们来分析服务注册过程,服务注册操作对于 Dubbo 来说不是必需的,通过服务直连的方式就可以绕过注册中心。但通常我们不会这么做,直连方式不利于服务治理,仅推荐在测试服务时使用。对于 Dubbo 来说,注册中心虽不是必需,但却是必要的。因此,关于注册中心以及服务注册相关逻辑,我们也需要搞懂。本节内容以 Zookeeper 注册中心作为分析目标,其他类型注册中心大家可自行分析。下面从服务注册的入口方法开始分析,我们把目光再次移到 Registry
2021-11-08 22:22:12
1063
原创 DUBBO源码分析二——服务导出
"2021SC@SDUSC"2.2 导出 Dubbo 服务前置工作做完,接下来就可以进行服务导出了。服务导出分为导出到本地 (JVM),和导出到远程。在深入分析服务导出的源码前,我们先来从宏观层面上看一下服务导出逻辑。如下:上面代码根据 url 中的 scope 参数决定服务导出方式,分别如下:scope = none,不导出服务 scope != remote,导出到本地 scope != local,导出到远程不管是导出到本地,还是远程。进行服务导出之前,均需要先创建 I.
2021-10-17 23:48:37
161
原创 Dubbo源码分析一——服务导出
"2021SC@SDUSC"一 简介 Dubbo服务导出过程始于Spring容器发布刷新事件,Dubbo在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装URL。第二部分是导出服务,包含导出服务到本地,和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。二服务导出的入口方法是ServiceBean的onApplicationEvent。onApplicationEvent是一个...
2021-10-10 21:55:35
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人