3.dubbo源码分析之API配置二(服务提供者)

Posted bilifuture

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.dubbo源码分析之API配置二(服务提供者)相关的知识,希望对你有一定的参考价值。

dubbo源码中的示例中的服务提供者api方式的实现如下:

上面的重点是ServiceConfig这个服务提供者来暴露服务配置类的实现

1.ProtocolConfig

ProtocolConfig表示服务提供者协议配置,解释参见官方<dubbo用户指南--dubbo:protocol>文档

2.AbstractMethodConfig

AbstractMethodConfig表示方法级的抽象配置类,解释参见官方<dubbo用户指南--dubbo:method>文档

3.MethodConfig

MethodConfig继承自AbstractMethodConfig表示方法级的抽象配置类,解释参见官方<dubbo用户指南--dubbo:method>文档

4.AbstractInterfaceConfig

AbstractInterfaceConfig继承自AbstractMethodConfig,抽象接口配置类,解释参见官方<dubbo用户指南--dubbo:service>文档和<dubbo用户指南--dubbo:reference>文档

5.AbstractServiceConfig

AbstractServiceConfig实现AbstractInterfaceConfig,抽象服务配置类,解释参见官方<dubbo用户指南--dubbo:service>文档和<dubbo用户指南--dubbo:provider>文档

6.ProviderConfig

ProviderConfig实现AbstractServiceConfig,服务提供者缺省值配置,解释参见<dubbo用户指南--dubbo:provider>文档

7.ServiceConfig

3.dubbo源码分析之API配置二(服务提供者)

ServiceConfig服务提供者暴露配置服务类.dubbo提供的demo中api方式的服务提供者暴露服务调用的是ServiceConfig.export()方法来实现服务暴露,主要做了如下事情:

1.进一步初始化ServiceConfig对象

2.校验ServiceConfig对象的配置项

3.使用ServiceConfig对象,生成Dubbo URL对象数组

4.使用Dubbo URL对象,暴露服务

7.1 export

export方法功能来暴露服务,如下:

3.dubbo源码分析之API配置二(服务提供者)

7.2 doExport

上面的暴露服务export方法又调用了doExport方法来执行暴露操作,如下:

3.dubbo源码分析之API配置二(服务提供者)

上面主要逻辑如下:

1.检查是否可以暴露,如果可以,标记为已经暴露

2.校验接口名非空

3.拼接属性配置(环境变量+properties属性)到ProviderConfig对象

4.从ProviderConfig对象中读取application,module,registries,monitor,protocol配置对象

5.从ModuleConfig对象中读取registries,monitor配置对象

6.从ApplicationConfig中读取registries,monitor配置对象

7.泛化接口的实现

8.普通接口的实现

8.1 校验接口和方法

8.2 校验指向的service对象

9.处理服务接口客户端本地代理(local)相关,已经废弃,使用stub属性,参见AbstractInterfaceConfig.setLocal方法.

10.处理服务接口客户端本地代理(stub)相关

11.校验ApplicationConfig配置

12.校验RegistryConfig配置

13.校验ProtocolConfig配置数组

14.读取环境变量和properties配置到ServiceConfig中

15.校验stub和mock相关配置

16.服务路径,默认是接口名

17.暴露服务

泛化调用:主要用于服务端没有api接口和模型类的情况,参数和返回值中多有的pojo都用map表示,通常用于框架集成

7.3 doExportUrls

doExportUrls方法用来暴露服务,以Dubbo URL方式暴露,如下:

3.dubbo源码分析之API配置二(服务提供者)

7.4 doExportUrlsFor1Protocol

上面暴露服务方法遍历调用了doExportUrlsFor1Protocol方法,实现如下:

主要逻辑如下:

1.协议名如果没有指定,使用默认协议名dubbo

2.获取配置的host,port参数,并校验host,port是否可用

2.把side,dubbo,timestamp,pid参数添加到map集合中

3.把各种配置信息添加到map集合中

4.把MethodConfig对象数组添加到map中

4.1把ArgumentConfig对象数组添加到map中

5.把generic,methods,revision,token加入到map中

6.如果协议是injvm时,不注册,不通知

7.导出服务

8.去掉导出的服务中的开头和结尾的/

9.构建Dubbo URL对象

10.根据配置信息进行本地/远程暴露

11.添加到已经暴露的服务集合中

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)

3.dubbo源码分析之API配置二(服务提供者)3.dubbo源码分析之API配置二(服务提供者)3.dubbo源码分析之API配置二(服务提供者)

8.Version

版本号实体类,如下:

3.dubbo源码分析之API配置二(服务提供者)

8.1 hasResource

hasResource方法判断是否有对应的资源文件,如下:

3.dubbo源码分析之API配置二(服务提供者)

8.2 getVersion

getVersion方法用来获取对应的版本好,实现如下:

3.dubbo源码分析之API配置二(服务提供者)




以上是关于3.dubbo源码分析之API配置二(服务提供者)的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo 学习笔记总结

0006JDK源码分析之服务提供者框架

SpringBoot-整合Dubbo+Zookeeper

dubbo同步调用异步调用和是否返回结果源码分析和实例

openfalcon源码分析之hbs

源码分析Dubbo系列之寻找注册中心服务提供者服务消费者功能入口