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
ServiceConfig服务提供者暴露配置服务类.dubbo提供的demo中api方式的服务提供者暴露服务调用的是ServiceConfig.export()方法来实现服务暴露,主要做了如下事情:
1.进一步初始化ServiceConfig对象
2.校验ServiceConfig对象的配置项
3.使用ServiceConfig对象,生成Dubbo URL对象数组
4.使用Dubbo URL对象,暴露服务
7.1 export
export方法功能来暴露服务,如下:
7.2 doExport
上面的暴露服务export方法又调用了doExport方法来执行暴露操作,如下:
上面主要逻辑如下:
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方式暴露,如下:
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.添加到已经暴露的服务集合中
8.Version
版本号实体类,如下:
8.1 hasResource
hasResource方法判断是否有对应的资源文件,如下:
8.2 getVersion
getVersion方法用来获取对应的版本好,实现如下:
以上是关于3.dubbo源码分析之API配置二(服务提供者)的主要内容,如果未能解决你的问题,请参考以下文章