关于nacos的data 目录和 snapshot-tenant 目录在实际工程启动的时候是如何选择的:
基于naocs 1.4.2 版本
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> <scope>compile</scope> </dependency>
1 private void loadApplicationConfiguration( 2 CompositePropertySource compositePropertySource, String dataIdPrefix, 3 NacosConfigProperties properties, Environment environment) { 4 String fileExtension = properties.getFileExtension(); 5 String nacosGroup = properties.getGroup(); 6 // 第一次加载load directly once by default 7 loadNacosDataIfPresent(compositePropertySource, dataIdPrefix, nacosGroup, 8 fileExtension, true); 9 // 第二次加载load with suffix, which have a higher priority than the default 10 loadNacosDataIfPresent(compositePropertySource, 11 dataIdPrefix + DOT + fileExtension, nacosGroup, fileExtension, true); 12 // Loaded with profile, which have a higher priority than the suffix 13 for (String profile : environment.getActiveProfiles()) { 14 String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtension; 15 loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup, 16 fileExtension, true); 17 } 18 19 }
1.第一次一般是直接获取本地的故障转移文件,如果获取到则直接返回,不用再去向Nacos Server发送http请求方式获取,
1.1首先程序会去查找故障转移的文件通过如下代码:
String content = LocalConfigInfoProcessor.getFailover(agent.getName(), dataId, group, tenant);
重点会去目录“C:\Users\zm_pc\nacos\config\fixed-brokernacos.newtest.huaxiacloud.com-broker-loc_nacos\data\config-data-tenant\broker-loc\loc\broker-bam-service-local-zm”底下查找,然后通过http的方式来进行拉取。关键代码:
result = agent.httpGet(Constants.CONFIG_CONTROLLER_PATH, null, params, agent.getEncode(), readTimeout);
如上结果会得到“RestResult{code=404, message='config data not exist', data=null}”
,然后会去删除【快照文件】文件“C:\Users\zm_pc\nacos\config\fixed-brokernacos.newtest.huaxiacloud.com-broker-loc_nacos\snapshot-tenant\broker-loc\loc\broker-bam-service-local-zm”底下的所有文件
2.第二次加载时就“带后缀加载,其优先级高于默认值”,会覆盖第一次获取到的配置文件的,此处需要特别注意的是这里的dataId为(dataIdPrefix + DOT + fileExtension,即broker-bam-service-local-zm+"."+properties)
2.1先去目录 “C:\Users\zm_pc\nacos\config\fixed-brokernacos.newtest.huaxiacloud.com-broker-loc_nacos\data\config-data-tenant\broker-loc\loc”底下查找文件:
broker-bam-service-local-zm.properties
2.2假如发现没有找到上述文件的话,会向Nacos发送http请求,path=/v1/cs/configs,params=dataId+group+tenant(namespace),会得到如下文件:
C:\Users\zm_pc\nacos\config\fixed-brokernacos.newtest.huaxiacloud.com-broker-loc_nacos\snapshot-tenant\broker-loc\loc\broker-bam-service-local-zm.properties
2.3ServerHttpAgent是带有异常重试机制的,重试后如果最终还是失败,则查看本地是否存在配置快照文件SnapshotFile,有则读取返回,否则返回null,SnapshotFile相当于Nacos Server不可用时一种容灾补救方式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构