Dubbo 源码分析 01 配置相关
dubbo-config-api
,实现了 API 配置 和 属性配置 功能。
dubbo-config-spring
,实现了 XML 配置 和 注解配置 功能。
依赖图如下:
dubbo 配置 知识点总结
1. 配置概述
- 服务发现:表示该配置项用于服务的注册与发现,目的是让消费方找到提供方。
- 服务治理:表示该配置项用于治理服务间的关系,或为开发测试提供便利条件。
- 性能调优:表示该配置项用于调优性能,不同的选项对性能会产生影响。
所有配置最终都将转换为 Dubbo URL 表示,并由服务提供方生成,经注册中心传递给消费方,各属性对应 URL 的参数,参见配置项一览表中的 “对应URL参数” 列。
2. 读取配置
appendProperties读取环境变量和properties 到配置对象
appendAnnotation : 读取注解配置到配置对象
3. 关于服务暴露
- 进一步初始化 ServiceConfig 对象。
- 校验 ServiceConfig 对象的配置项。
- 使用 ServiceConfig 对象,生成 Dubbo URL 对象数组。
- 使用 Dubbo URL 对象,暴露服务。
- 拼接属性配置到ProviderConfig对象
- 服务暴露过程中会校验各种配置
4. 服务消费
- 进一步初始化 ReferenceConfig 对象。
- 校验 ReferenceConfig 对象的配置项。
- 使用 ReferenceConfig 对象,生成 Dubbo URL 对象数组。
- 使用 Dubbo URL 对象,应用服务。
各种配置解析后,会增加到参数集合map,用于创建Dubbo URL的parameters属性
5.属性配置
FROM 《Dubbo 用户指南 —— 属性配置》
如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties
作为缺省配置。
Dubbo 将自动加载 classpath 根目录下的 dubbo.properties
,可以通过JVM启动参数 -Ddubbo.properties.file=xxx.properties
改变缺省配置位置
6.XML 配置
XML 配置,自定义 <dubbo: />
标签,基于 Spring XML 进行解析
6.1 init方法中,定义了每个<xsd:element/>对应的 xml.BeanDefinitionParser, 对xml文件进行解析
parse方法,解析XML元素
6.2 解析xml后,创建rootBeanDefinition,解析成BeanDefinition对象后,再创建Bean对象
6.3 循环Bean 对象的setting方法,把属性赋值到Bean对象
6.4 解析各种dubbo标签
7.注解配置
7.1 通过使用 Java Config + 注解的方式,相比 XML 来说,会更加熟悉一些
7.2 @EnableDubbo
注解,是 @EnableDubboConfig
和 @DubboComponentScan
的组合注解,使用时更加便利
扫描Dubbo的服务提供者( @Service注解),以及Dubbo的服务消费者(@Reference注解)
7.3 注册相应的Dubbo config到Spring 容器中
7.4 reference的bean,缓存到cache中
7.5 远程的Dubbo服务,已经存在,可以进行加载引用;本地的Dubbo服务,此时未暴露,先添加到cache中进行缓存
7.6 #init()
方法,可以调用 ReferenceBean#get()
方法,进行引用的 Bean 的初始化,最后返回引用 ref
8.外部化配置
8.1 DubboAutoConfiguration
,Dubbo 自动配置类, 扫描对应的注解