[Dubbo3.0.8源码解析系列]-14-Dubbo配置加载全解析

Posted 宋小生的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Dubbo3.0.8源码解析系列]-14-Dubbo配置加载全解析相关的知识,希望对你有一定的参考价值。



目录

  • ​​14-Dubbo配置加载全解析​​
  • ​​14.1 回到启动器的初始化过程​​
  • ​​14.2 初始化加载应用配置​​

14-Dubbo配置加载全解析

14.1 回到启动器的初始化过程

在应用程序启动的时候会调用发布器的启动方法 ,然后调用初始化方法,在发布器DefaultApplicationDeployer中的初始化方法initialize() 如下:

@Override
public void initialize()
if (initialized)
return;

// Ensure that the initialization is completed when concurrent calls
synchronized (startLock)
if (initialized)
return;

// register shutdown hook
registerShutdownHook();

startConfigCenter();

loadApplicationConfigs();

initModuleDeployers();

// @since 2.7.8
startMetadataCenter();

initialized = true;

if (logger.isInfoEnabled())
logger.info(getIdentifier() + " has been initialized!");


初始化过程中会先启动配置中心配置信息处理,然后 调用加载初始化应用程序配置方法loadApplicationConfigs();进行配置加载

关于配置的官方文档链接为 ​​配置概述​

Dubbo框架的配置项比较繁多,为了更好地管理各种配置,将其按照用途划分为不同的组件,最终所有配置项都会汇聚到URL中,传递给后续处理模块。

常用配置组件如下

  • application: Dubbo应用配置
  • registry: 注册中心
  • protocol: 服务提供者RPC协议
  • config-center: 配置中心
  • metadata-report: 元数据中心
  • service: 服务提供者配置
  • reference: 远程服务引用配置
  • provider: service的默认配置或分组配置
  • consumer: reference的默认配置或分组配置
  • module: 模块配置
  • monitor: 监控配置
  • metrics: 指标配置
  • ssl: SSL/TLS配置

配置还有几个比较重要的点:

配置来源

从Dubbo支持的配置来源说起,默认有6种配置来源:

  • JVM System Properties,JVM -D 参数
  • System environment,JVM进程的环境变量
  • Externalized Configuration,外部化配置,从配置中心读取
  • Application Configuration,应用的属性配置,从Spring应用的Environment中提取"dubbo"打头的属性集
  • API / XML /注解等编程接口采集的配置可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式
  • 从classpath读取配置文件 dubbo.properties

覆盖关系

下图展示了配置覆盖关系的优先级,从上到下优先级依次降低: [Dubbo3.0.8源码解析系列]-14-Dubbo配置加载全解析_加载

配置方式

  • Java API配置
  • XML配置
  • Annotation配置
  • 属性配置

配置虽然非常多,但是我们掌握一下配置加载的原理,再了解下官网的文档说明路径应该基础的配置搞定是没问题的,更深入的配置很多参数还是需要了解下源码的.

14.2 初始化加载应用配置

加载配置涉及到了配置优先级的处理,

下面来看加载配置代码 loadApplicationConfigs()方法

private void loadApplicationConfigs() 
//发布器还是不处理配置加载的逻辑还是交给配置管理器
configManager.loadConfigs();

配置管理器加载配置:

@Override
public void loadConfigs()
// application config has load before starting config center
// load dubbo.applications.xxx
//加载应用配置
loadConfigsOfTypeFromProps(ApplicationConfig.class);

// load dubbo.monitors.xxx
//加载监控配置
loadConfigsOfTypeFromProps(MonitorConfig.class);

// load dubbo.metrics.xxx
//加载指标监控配置
loadConfigsOfTypeFromProps(MetricsConfig.class);

// load multiple config types:
// load dubbo.protocols.xxx
//加载协议配置
loadConfigsOfTypeFromProps(ProtocolConfig.class);

// load dubbo.registries.xxx
loadConfigsOfTypeFromProps(RegistryConfig.class);

// load dubbo.metadata-report.xxx
//加载元数据配置
loadConfigsOfTypeFromProps(MetadataReportConfig.class);

// config centers has bean loaded before starting config center
//loadConfigsOfTypeFromProps(ConfigCenterConfig.class);

//刷新配置
refreshAll();

//检查配置
checkConfigs();

// set model name
if (StringUtils.isBlank(applicationModel.getModelName()))
applicationModel.setModelName(applicationModel.getApplicationName());



以上是关于[Dubbo3.0.8源码解析系列]-14-Dubbo配置加载全解析的主要内容,如果未能解决你的问题,请参考以下文章

dubbo2.5.X 升级dubbo3.0.8—weblogic启动异常排查

dubbo2.5.X 升级dubbo3.0.8—weblogic启动一直报错

Spring读源码系列02----默认标签解析过程

Java小白进阶系列——ConcurrentHashMap源码解析文章总目录

canal 源码解析系列-CanalInstance模块解析

RocketMQ源码系列 NameServer 核心源码解析