Nacos2.x config 源码刨析

 

目录

 

一.nacos service启动,将配置信息Dump磁盘上,并且推送客户端

二. 用户在nacos-console控制界面修改了配置

三 . nacos client 启动

四.nacos 配置中心启动相关的配置

RefreshAutoConfiguration

NacosConfigAutoConfiguration

NacosConfigBootstarpConfig


nacos config 源码架构图 (完整版)

http://assets.processon.com/chart_image/6378a4d1f346fb01d4141010.png

下文配置为略缩图,完整版点击链接在线查看⬆️⬆️⬆️

一.nacos service启动,将配置信息Dump磁盘上,并且推送客户端

  1. spring构建bean的过程中会执行ExternalDumpService内的@PostConstruct 的初始化方法
  2. DumpService# dumpConfigInfo 将数据库configinfo表全量查询出来,根据mysql 主键最大ID ,分页1000 循环查询
  3. 然后写入磁盘文件中,每隔6h 自动刷新一次,如果本地磁盘已存在则不保存
  4. updataMd5 方法内,判断md5 是否为空 或者不同,然后更新本地缓存
  5. 发布本地数据事件, NotifyCenter.publishEvent(new LocalDataChangeEvent(groupKey));
  6. RpcConfigChangeNotifier#onEvent 监听到数据之后,拉取所以监听到客户端,发布rpc 任务,将最新配置信息 已push模式推送到nacos client
  7. ClientWorker#notifyListenConfig客户端接收到配置数据之后 会放入阻塞队列内,客户端会在阻塞队列内获取任务执行

二. 用户在nacos-console控制界面修改了配置

1.post请求:/nacos/v1/cs/configs,接收到请求之后,将数据持久化到mysql 上

2.发布ConfigDataChangeEvent 改变事件,将事件放入阻塞队列内,

  1. 放入nacos 异步执行任务中,
  2. 如果放入队列失败,会触发notifySubscriber任务 异步通知订阅者
  3. 通知客户端配置发生了变更,同时通知集群内其他节点
  4. 刷新本地磁盘

获取配置流程 本地缓存 <<--- 本地磁盘 ----<< mysql 库

三 . nacos client 启动

1.spring Application.run 开启java.awt.headless模式,获取启动类,然后启动监听

2.prepareEnvironment 初始化环境.....

3.prepareContext 准备环境,获取nacos配置中心服务,加载共享配置文件,加载扩展配置文件,加载当前应用程序配置文件

4. loadNacosPropertySource 去拉取配置信息,查询本地是否有缓存,没有则 rpc远程调用配置中心,获取配置之后保存本地磁盘,且加载到map 缓存中

5.listeners.running(context); 发布 ApplicationReadyEvent 事件

6.NacosContextRefresher.onApplicationEvent 接收到事件之后 会将每个dataId 注册监听,当用户发布新的配置会回调listener

未完待续....


四.nacos 配置中心启动相关的配置

RefreshAutoConfiguration

spring-cloud-context-2.2.9.RELEASE.jar/META-INF/spring.factories

  1. 在服务启动后 RefreshAutoConfiguration 类 会初始化@bean ,RefreshEventListener用于处理RefreshEvent事件,
  2. 把之前的Environment里面的参数放到一个新建的spring context 容器下重新加载,完事之后关闭容器,获取参数的新值
  3. 然后发布环境参数改变事件
  4. 清除scope里面的缓存,会获取到新的一个实例


NacosConfigAutoConfiguration

spring-cloud-starter-alibaba-nacos-config-2.2.8.RELEASE.jar/META-INF/spring.factories

1.服务启动时初始化 NacosContextRefresher , 注册nacos 监听,

NacosConfigBootstarpConfig

spring-cloud-starter-alibaba-nacos-config-2.2.8.RElEASE.jar/META-INF/spring.factories

  1. 初始化NacosConfigProperties、 NacosConfigManager、NacosPropertySourceLocator...
  2. NacosConfigManager 初始化,通过反射调用NacosConfigService 的构造器
  3. startInternal(); 通过线程池执行延时任务,while +阻塞队列实现轮训
  4. 根据根据变化的dataid 调用nacos config 服务端获取配置信息,并跟更新本地快照
  5. 通过listener.receiveConfigInfo(contentTmp);对有变化的配置进行监听
  6. 发布发布RefreshEvent事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值