

Dubbo 之服务消费原理
source link: https://mp.weixin.qq.com/s/9ibX-46VfTnBLWcSSLpXQg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言
上篇文章《Dubbo之服务暴露》分析 Dubbo 服务是如何暴露的,本文接着分析 Dubbo 服务的消费流程。主要从以下几个方面进行分析: 注册中心的暴露 ; 通过注册中心进行服务消费通知 ; 直连服务进行消费 。服务消费端启动时,将自身的信息注册到注册中心的目录,同时还订阅服务提供方的目录,当服务提供方的 URL 发生更改时,实时获取新的数据。
服务消费端流程
下面是一个服务消费的流程图:
上图中可以看到,服务消费的流程与服务暴露的流程有点类似逆向的。同样,Dubbo 服务也是分为两个大步骤:第一步就是将远程服务通过 Protocol
转换成 Invoker
(概念在上篇文章中有解释)。第二步通过动态代理将 Invoker
转换成消费服务需要的接口。
org.apache.dubbo.config.ReferenceConfig
类是 ReferenceBean
的父类,与生产端服务的 ServiceBean
一样,存放着解析出来的 XML 和注解信息。类关系如下:
服务初始化中转换的入口
当我们消费端调用本地接口就能实现远程服务的调用,这是怎么实现的呢?根据上面的流程图,来分析消费原理。在消费端进行初始化时 ReferenceConfig#init
,会执行 ReferenceConfig#createProxy
来完成这一系列操作。以下为 ReferenceConfig#createProxy
主要的代码部分:
上面转换的过程中,主要可概括为:先分为本地引用和远程引用两类。本地就是以 inJvm 协议的获取本地服务,这不做过多说明;远程引用分为直连服务和通过注册中心。注册中心分为单注册中心和多注册中心的情况,单注册中心好解决,直接使用即可,多注册中心时,将转换后的 Invoker 合并成一个 Invoker。最后通过动态代理将 Invoker 转换成本地接口代理。
获取 Invoker 实例
由于本地服务时直接从缓存中获取,这里就注册中心的消费进行分析,上面代码片段中使用的是 REF_PROTOCOL.refer
进行转换,该方法代码:
上面主要是获取服务消费的注册中心实例和进行服务分组,最后调用 doRefer
方法进行转换工作,以下为 doRefer
的代码:
上面实现主要是完成创建 RegistryDirectory 对象,将消费服务元数据注册到注册中心,通过 RegistryDirectory 对象里的信息,实现服务提供端,动态配置及路由的订阅相关功能。
RegistryDirectory 这个类实现了 NotifyListener 这个通知监听接口,当订阅的服务,配置或路由发生变化时,会接收到通知,进行相应改变:
RegistryDirectory#notify
里面最后会刷新 Invoker 进行重新加载,下面是核心代码的实现:
获取刷新前后的 Invokers,将新的 Invokers 重新缓存起来,通过对比,销毁无用的 Invoker。
上面将 URL 转换 Invoker 是在 RegistryDirectory#toInvokers
中进行。
总结
通过《Dubbo之服务暴露》和本文两篇文章对 Dubbo 服务暴露和服务消费原理的了解。我们可以看到,不管是暴露还是消费,Dubbo 都是以 Invoker 为数据交换主体进行,通过对 Invoker 发起调用,实现一个远程或本地的实现。
关注【ytao】,更多原创好文
Recommend
-
34
-
2
上篇文章《Dubbo之服务暴露》分析 Dubbo 服务是如何暴露的,本文接着分析 Dubbo 服务的消费流程。主要从以下几个方面进行分析:注册中心的暴露;通过注册中心进行服务消费通知
-
6
前面我们已经分析Dubbo SPI相关的源码,看过的小伙伴相信已经知晓整个加载过程,我们也留下两个问题,今天我们先来处理下其中关于注解Adaptive的原理。 什么是@Adaptive 对应于Adaptive机制,Dubbo提供了一个注解@Adaptive,该注解可以用于接口的某...
-
3
Dubbo-Activate实现原理 在Dubbo中有Filter使用,对于Fi...
-
7
Dubbo 3 之 Triple 流控反压原理解析 精选 原创 作者:顾欣
-
7
作者:顾欣 Triple 是 Dubbo 3 提出的基于 HTTP2 的开放协议,旨在解决 Dubbo 2 私有协议带来的互通性问题。Triple 基于 HTTP/2 定制自己的流控,支持通过特定的异常通知客户端业务层服务端负载高情况,保护了服务端被大流量击垮...
-
8
一文了解 Dubbo 3 配置工作原理 以下是一个...
-
9
当服务提供者启动时,服务提供者将自己提供的服务信息注册到注册中心,注册中心将这些信息记录下来。服务消费...
-
7
Dubbo2.7的Dubbo SPI实现原理细节 总结/朱季谦
-
6
图解Dubbo,Dubbo服务消费详解 作者:哪吒 2023-04-14 08:19:27 开源 Dubbo 是一款开源的分布式服务框架,它为分布式系统的开发和部...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK