0
点赞
收藏
分享

微信扫一扫

[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());
}
}



举报

相关推荐

0 条评论