微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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定义

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

      对于完整流程我们可以看一下官网的时序图

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐