nacos配置中心-获取配置流程

nacos配置中心本地缓存灾备目录默认如下,可以自行更改

LOCAL_SNAPSHOT_PATH =
                System.getProperty("JM.SNAPSHOT.PATH", System.getProperty("user.home")) 
                + File.separator + "nacos"
                        + File.separator + "config";

入口

NacosPropertySourceLocator.locate().loadApplicationConfiguration()

获取config配置中心配置文件

curl GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=merbuzi-service.properties&group=DEFAULT_GROUP&tenant=dev"

1.第一次会直接获取本地【故障转移文件】FailoverFile config-data-tenant目录获取配置文件

如果获取到则直接返回,不用再去向Nacos Server发送http请求方式获取,
不过一般情况下客户端不会写FailoverFile配置文件,即正常情况下FailoverFile都是不存在的,主要可能是某种场景下扩展使用
V:
acosconfigfixed-10.148.201.189_8848-dev_nacosdataconfig-data-tenantdevDEFAULT_GROUPmerbuzi-service

1.1当FailoverFile获取不到 404时 会去先删除【快照文件】SnapshotFile snapshot-tenant目录文件,然后向Nacos发送http请求,path=/v1/cs/configs,params=dataId+group+tenant(namespace), 返回值就是配置文件内容信息,成功则将最新配置内容写入到本地SnapshotFile中,然后返回;

V:
acosconfigfixed-10.148.201.189_8848-dev_nacossnapshot-tenantdevDEFAULT_GROUPmerbuzi-service

2.第二次 再次加载load with suffix, which have a higher priority than the default 带有后缀properties的,比默认值更有优先级,会覆盖第一次获取到的配置文件

dataid + dot + properties 直接获取 config-data-tenant目录获取配置文件
V:
acosconfigfixed-10.148.201.189_8848-dev_nacosdataconfig-data-tenantdevDEFAULT_GROUPmerbuzi-service.properties
发现没有这个文件,
然后http nacos/v1/cs/configs获取config写到这个文件
V:
acosconfigfixed-10.148.201.189_8848-dev_nacossnapshot-tenantdevDEFAULT_GROUPmerbuzi-service.properties

3.ServerHttpAgent是带有异常重试机制的,重试后如果最终还是失败,则查看本地是否存在配置快照文件SnapshotFile,有则读取返回,否则返回null,SnapshotFile相当于Nacos Server不可用时一种容灾补救方式。

总结:
	1.1.4.1版本的nacos启动获取配置会取两次,第一次取data_id不带后缀的,
	2.不管拉到拉不到,都会第二次获取默认带后缀properties的data_id的配置[例:user-service.properties],
	3.第二次的优先级最高,会将第一次获取的配置删除然后新增
经验分享 程序员 微信小程序 职场和发展