Nacos——配置中心源码详解

本文详细解析了Nacos配置中心客户端如何通过主动获取和长轮询机制更新配置,涉及文件分片、本地配置对比、服务端长轮询策略及通知机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文基于1.4.3版本
GitHub地址:https://github.com/alibaba/nacos/releases

配置中心

客户端的配置有两种方式来维持,一是客户端主动获取,二是客户端长轮询更新

关于配置文件有几个类型要说明一下:
1.本地配置文件:本地就已经存在的配置文件
2.本地缓存文件:从服务端获取的保存在了本地(本地生成了文件)
3.cacheData缓存数据:内存中缓存的配置文件数据

客户端主动获取

在这里插入图片描述

客户端

ConfigExample中我们可以得知,获取配置的方法为NacosConfigService.getConfig

1.优先从本地配置中获取
2.本地配置中没有则会去服务端获取
3.服务端异常且异常不是因为鉴权失败,则从本地缓存文件中获取

在这里插入图片描述

我们来到ClientWorker.getServerConfig方法里面:
1.发起HTTP请求,URL:/v1/cs/configs
2.请求后不管怎样都会先创建一个本地缓存文件,只不过成功的会带有数据以及文件类型

在这里插入图片描述

服务端

ConfigController.getConfig

在这里插入图片描述

除去前面的参数校验以及处理,直接看ConfigServletInner.doGetConfig方法:

(里面判断分支太多就不截全部了,文件不是读数据库就是读本地文件)

1.获取读锁,获取不到就自旋重复获取10次
2.根据beta、tag、autoTag来判断读什么配置
3.PropertyUtil.isDirectRead()判断是读mysql还是读文件
4.使用jdk的零拷贝传输直接将文件输入流转response输出流
5.释放读锁

在这里插入图片描述

在这里插入图片描述

网上找的doGetConfig方法流程图

在这里插入图片描述

客户端长轮询更新

在这里插入图片描述

客户端

1.入口

NacosConfigService初始化的时候,会初始化两个组件

  • 一是网络组件,也就是http数据处理的(起作用的是ServerHttpAgent
  • 二是客户端的长轮询ClientWorker

在这里插入图片描述

ClientWorker在初始化的时候就会初始化两个定时调度线程池,以及启动一个定时任务,该定时任务会执行ClientWorker.checkConfigInfo() 方法(10ms执行一次):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值