前言
文章使用nacos的sdk为大家解释下Nacos配置中心发布配置和获取配置的流程,大家肯定都遇到过 发布新配置,获取到的却是old配置的时候,这里给大家梳理下这个流程,帮助大家能快速定位到问题。
发布和获取概览
配置文件发布以后,会先存储到数据库,然后会通知其他服务节点更新本地配置文件。获取会从服务器的本地文件配置。
配置数据改变通知
1、DumpService 的handleConfigDataChange方法会把任务添加到 TaskManager的任务中。
2、NacosDelayTaskExecuteEngine类内存中存储 AbstractDelayTask,有addTask方法会存储全局变量tasks中。同时启动的时候会每隔 100ms去消耗 tasks的任务。
3、这个任务最终会ConfigCacheService进行dump.
a.先判断当前的更新时间(来源于通知的服务器时间)是否大于上次更新时间,如果时间不大于上次的时间,会直接返回,不会保存到磁盘了。
b. 判断md5是否改变了,md5改变了会把content更新到该节点本地磁盘文件。md5是对content取得md5值。
c. 更新内存的md5值和最后一次更新的时间。
d. 最后会通知客户端配置改变了。
配置获取
获取就很简单了。直接从本地文件获取,ConfigQueryRequestHandler这个类是sdk获取配置的逻辑。
总结
配置发布:写入数据库,并发布配置改变事件。通知server所有节点把配置写入 服务器磁盘文件。
配置获取:直接读服务器磁盘文件。
所以,性能测试读配置很快,发布配置就很慢。