Dubbo的服务暴露过程

一、URL

       在说Dobbu之前我们先来讲一下URL,为什么要提URL呢?
       一般而言我们说的 URL 指的就是统一资源定位符,在网络上一般指代地址,本质上看其实就是一串包含特殊格式的字符串,标准格式如下:

https://www.linzhuotech.com/Product/download?value=lz

       而Dubbo就是采用URL的方式作为约定参数类型,也可以理解为Provider和Consumer沟通的枢纽。如果没有这个标准,那么不同的接口就会以不同的参数来传递信息,而且通过统一的契约之后,代码会显得更加的规范。

二、服务暴露过程

1、执行过程
第一步:检测Dubbo配置,如果配置为空则会默认创建,并组装成URL。
第二步:暴露服务,Provider将服务暴露给本地服务和远程的服务。
第三步:将Provider服务提交至注册中心。

2、对象创建过程
第一步:Dubbo将服务实现类转换成Invoker。
第二步:将Invoker转换成Exporter。

三、源码分析

1、在初始化过程中service定义
Dubbo的服务暴露过程

       这里实现了ApplicationListener,所以就会在SpringIOC容器刷新完成后调用onApplicationEvent()方法,这个方法里面做的就是服务暴露,也是服务的启动点。接着通过调用export方法完成暴露过程。
而Dubbo支持多注册中心,并且支持多个协议,一个服务如果有多个协议那么就都需要暴露。因此需要将多个协议分别向多个注册中心暴露注册,这里我们看一下doExportUrls方法具体实现。
Dubbo的服务暴露过程

2、封装成invoker
      至于为什么要封装成invoker其实就是想屏蔽调用的细节,统一暴露出一个可执行体。
Dubbo的服务暴露过程

      然后我们看下export是什么样子。如下图,export方法是标注了@Adaptive注解的,因此会生成代理类,然后代理类会根据Invoker里面的URL参数得知具体的协议,然后通过Dubbo SPI机制选择对应的实现类进行export。
Dubbo的服务暴露过程

      对于完整流程我们可以看一下官网的时序图。
Dubbo的服务暴露过程

上一篇:dubbo的服务发布


下一篇:dubbo系列--本地服务发布源码分析