springcloudalibaba nacos客户端 自动获取配置 启动流程
1.spring.factories中有引导程序配置项:org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration,\
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration
引导程序配置项相当于application中的autoconfiguration配置,在bootstrap中使用。
2.com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration会注册2个bean
nacosConfigProperties
nacosPropertySourceLocator
3.nacosConfigProperties会自动加载spring.cloud.nacos.config的配置项目,这里定义了nacos config服务器的连接信息, 需访问的配置项信息
4.nacosPropertySourceLocator的locate方法会实例化一个configService(),创建nacosPropertySourceBuilder,
nacosPropertySourceBuilder里封装了对nacos config服务器的访问,通过配置属性生成nacos配置项名称
locate方法由bootstrap上下文的SpringApplication.prepareContext方法中的applyInitializers里的PropertySourceBootstrapConfiguration.initialize调用
4.1实例化一个configService
创建一个httpagent
启动agent,这里如果只配置了endpoint,会启动定时器访问地址服务器来刷新服务器地址列表
创建一个ClientWorker,这里后面会用到
4.1.1实例化ClientWorker
clinetworker里创建了2个调度线程池,并启动 固定延迟策略(上一个任务执行完之后延迟多少时间) 调度长轮询管理器线程
长轮询管理器线程池,通过执行checkConfigInfo来管理 长轮询线程池 执行longPolling线程,(线程数量=cacheMap的配置数量/每个长轮询线程处理的配置数量)
cacheMap在ApplicationReader事件中由NacosContextRefresher监听修改,这里为空,暂时不会启动长轮询线程
长轮询线程池,执行longPolling线程(自注册的线程,每次执行完会重新注册一个任务),检测配置变更,并更新缓cacheMap
1.checkLocalConfig
2.checkUpdateDataIds
先获取有变化的ID,checkUpdateDataIds
然后轮询获取配置,getServerConfig
长轮询管理器线程池线程名
com.alibaba.nacos.client.Worker.${agentName}
长轮询线程池线程名
com.alibaba.nacos.client.Worker.longPolling.${agentName}
5.分别加载配置
loadSharedConfiguration(composite); // 加载nacos共享配置
loadExtConfiguration(composite); //加载ext配置
loadApplicationConfiguration(composite, dataIdPrefix, nacosConfigProperties, env);//加载应用配置,默认是刷新的
最终调用loadNacosDataIfPresent访问nacos服务器获取配置项(不可刷新的NacosPropertySourceRepository优先,这里刚启动肯定为空)
以上加载的配置项目保存在composite(CompositePropertySource)中,名字为NACOS
6.loadNacosDataIfPresent
通过nacosPropertySourceBuilder.build获取nacosPropertySource并添加到composite的最前面
7.nacosPropertySourceBuilder.build
通过loadNacosData获取Properties创建nacosPropertySource,并添加到仓库中
8.loadNacosData
通过configService.getConfig获取配置数据,并根据扩展名解析配置数据得到Properties
9.getConfigInner
优先读取本地配置(故障转移文件nacos/config/${agentName}_nacos/data/config-data/${group}/${dataId})LocalConfigInfoProcessor.getFailover,非空就返回
读取nacos服务器配置
worker.getServerConfig 成功就返回
如果是鉴权失败就抛出异常,其他失败则读取快照 (快照文件nacos/config/${agentName}_nacos/snapshot/${group}/${dataId})
LocalConfigInfoProcessor.getSnapshot,返回
10.worker.getServerConfig
读取nacos服务器配置 /v1/cs/configs,写快照文件
2965




被折叠的 条评论
为什么被折叠?



