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.第二次的优先级最高,会将第一次获取的配置删除然后新增