Nacos 配置中心源码分析

本文深入探讨了Nacos配置中心的源码,详细分析了`loadApplicationConfiguration`、`loadNacosDataIfPresent`和`loadNacosPropertySource`等关键方法,揭示了配置加载的过程,包括如何从本地和远程获取配置信息。文中还提到了长轮询机制的实现,如`checkConfigInfo`和`LongPollingRunnable`,以及监听器的添加和回调触发。此外,文章提及了Nacos客户端和服务端交互的细节,包括`ServerWorker`的`getServerConfig`方法。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

配置加载有三个方法 loadSharedConfiguration、loadSharedConfiguration、 loadApplicationConfiguration 以 loadApplicationConfiguration 继续跟进。

private void loadApplicationConfiguration(

CompositePropertySource compositePropertySource, String dataIdPrefix,

NacosConfigProperties properties, Environment environment) {

String fileExtension = properties.getFileExtension();

String nacosGroup = properties.getGroup();

// load directly once by default

loadNacosDataIfPresent(compositePropertySource, dataIdPrefix, nacosGroup,

fileExtension, true);

// load with suffix, which have a higher priority than the default

loadNacosDataIfPresent(compositePropertySource,

dataIdPrefix + DOT + fileExtension, nacosGroup, fileExtension, true);

// Loaded with profile, which have a higher priority than the suffix

for (String profile : environment.getActiveProfiles()) {

String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtension;

loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup,

fileExtension, true);

}

}

主要通过 loadNacosDataIfPresent 读取配置信息, 其实我们可以通过参数看出,主要配置文件包含以下部分:dataId, group, fileExtension

private void loadNacosDataIfPresent(final CompositePropertySource composite,

final String dataId, final String group, String fileExtension,

boolean isRefreshable) {

if (null == dataId || dataId.trim().length() < 1) {

return;

}

if (null == group || group.trim().length() < 1) {

return;

}

NacosPropertySource propertySource = this.loadNacosPropertySource(dataId, group,

fileExtension, isRefreshable);

this.addFirstPropertySource(composite, propertySource, false);

}

然后调用 loadNacosPropertySource 最后一步步的会调用到 ​ ​NacosConfigService#getConfigInner​ ​

private String getConfigInner(String tenant, String dataId, String group, long timeoutMs) throws NacosException {

group = null2defaultGroup(group);

ParamUtils.checkKeyParam(dataId, group);

ConfigResponse cr = new ConfigResponse();

cr.setDataId(dataId);

cr.setTenant(tenant);

cr.setGroup(group);

// 优先使用本地配置

String content = LocalConfigInfoProcessor.getFailover(agent.getName(), dataId, group, tenant);

if (content != null) {

LOGGER.warn(“[{}] [get-config] get failover ok, dataId={}, group={}, tenant={}, config={}”, agent.getName(),

dataId, group, tenant, ContentUtils.truncateContent(content));

cr.setContent(content);

configFilterChainManager.doFilter(null, cr);

content = cr.getContent();

return content;

}

try {

// 获取远程配置

String[] ct = worker.getServerConfig(dataId, group, tenant, timeoutMs);

cr.setContent(ct[0]);

configFilterChainManager.doFilter(null, cr);

content = cr.getContent();

return content;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值