Dubbo系列之服务导出底层源码分析

7 篇文章 0 订阅
2 篇文章 0 订阅

前言         

今天咱们聊聊RPC框架,RPC框架包括哪些呢,下面列举了一些主要的开源框架包括

名称开源公司特点
dubbo阿里巴巴公司仅支持java
SpringCloud国外Pivotal仅支持java
Motan微博仅支持java
Tars腾讯仅支持C++
gRPCGoogle支持多种语言
ThriftFacebook支持多种语言

下面简单的看看这些框架的架构图,当然这些架构主要从官网照搬过来,大家随便看看

dubbo

 Motan

Tars

SpringCloud

gRPC

Thrift

还有很多RPC框架是没有开源,例如京东的jsf等,一般大厂都有自己的rpc框架,但是中小企业没有实力来自研这类软件,而且开源的框架已经很稳定,所以这类企业一般会选择某个开源框架,在国内使用比较多是dubbo和springcloud,二者有各自的特点,我们就不比较了。今天我们来聊聊这些框架中dubbo,一篇文章无法全面来了解他,这里我们聊他比较重要的一块内容,导出功能。

正文

      Dubbo 服务导出过程开始于Spring容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。

        整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务。

ServiceBean类继承ServiceConfig类,实现了ApplicationListener接口,实现了该接口的onApplicationEvent方法,onApplicationEvent 是一个事件响应方法,该方法会在收到 Spring 上下文刷新事件后执行服务导出操作。

导出功能入口是在ServiceBean#onApplicationEvent方法里:

1、ServiceBean#onApplicationEvent

在onApplicationEvent 的构造方法中,判断是否有延迟导出、是否已经导出、是否已经取消导出如果是则执行导出服务export方法。

2、export()方法

主要逻辑是获取导出参数判断是否需要延迟导出等如下图所示

3、doExport()方法主要逻辑是

1)检测 <dubbo:service> 标签的 interface 属性合法性,不合法则抛出异常。

2)检测 ProviderConfig、ApplicationConfig 等核心配置类对象是否为空,若为空,则尝试从其他配置类对象中获取相应的实例。

3)检测并处理泛化服务和普通服务类。

4)检测本地存根配置,并进行相应的处理。

5)对 ApplicationConfig、RegistryConfig 等配置类进行检测,为空则尝试创建,若无法创建则抛出异常。

具体逻辑如下图所示:

 

  

4、urldoExportUrls()方法

5、加载注册中心链接loadRegistries(true)逻辑

1)检测是否存在注册中心配置类,不存在则抛出异常

2)构建参数映射集合,也就是

3)构建注册中心链接列表

4)遍历链接列表,并根据条件决定是否将其添加到 registryList 中

详细逻辑如下:

6、组装url doExportUrlsFor1Protocol(protocolConfig, registryURLs)方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值