Naco配置中心客户端源码
2021-08-18 10:05:33 3 举报
Naco配置中心
作者其他创作
大纲/内容
BootstrapImportSelectorConfiguration
文件名namespace+dataId+group
添加刷新记录到集合中
处理事件
发布一个ApplicationEnvironmentPreparedEvent事件BootstrapApplicationListener监听器会监听这一类的事件,并作出响应的处理
客户端
对有变化的配置调用事件监听器处理
@Bean
SpringApplication.run
checkConfigInfo()检查配置信息
executorService.execute(new LongPollingRunnable(i))
发布刷新事件
NacosPropertySourceLocator
服务端从服务端获取配置文件,不是查mysql服务端启动时会把mysql配置加载到本地磁盘中
publishEvent(new RefreshEvent)
添加监听器
CacheData.safeNotifyListener
bootstrap.properties文件属性设置到Spring环境中
1.获取Environment应用中所有的配置参数和新的配置参数进行比对,找出有变化的参数,发布环境变更事件,并带上新的参数值(EnvironmentChangeEvent)2.然后刷新@RefreshScope注解标注所有bean实例
NacosConfigManager配置管理器
nacosRefreshHistory.addRefreshRecord
解析配置文件,加载业务 bean,启动 tomcat 等
同步等待数据返回
prepareEnvironment
根据服务端端返回变更数据集合遍历调用服务端接口获取配置信息
checkUpdateDataIds
PropertySourceBootstrapConfiguration
注册一个负责监听配置变更回调的监听器一旦收到配置变更的回调则触发客户端动态配置刷新流程
PropertySourceLocators.locate()触发实现所有实现此接口的locate
listener.receiveConfigInfo(contentTmp)
触发回调方法
进行自动装配
NacosConfigAutoConfiguration
如果本地配置有,并且与本地缓存中的配置一样,就把本地配置更新到缓存,并触发事件
NacosConfigBootstrapConfiguration启动时加载配置中心数据到本地
NacosFactory.createConfigServic
自动装配的类
bootstrapServiceContext
BootstrapImportSelector负责自动配置信息的加载
触发回调加载远程配置信息
loadNacosData
环境的准备工作
1.调用服务端获取配置详情接口,服务端不是去查mysql,而是去查本地磁盘的缓存,因为服务端启动是会分页查询mysql中的配置信息,保存的服务端的本地磁盘中2.所有如果直接修改数据配置是不能生效的,除非重启服务端,在控制台修改后会持久哈到mysql,并发布一个配置变更事件,对应的监听器才会去触发服务端内存和本地文件的更新
innerReceive 回调方法
refreshContext(context)
向配置中心服务端发起一个长连接30s超时
listeners.running(context)
/v1/cs/configs
等待数据返回
加载扩展配置文件extension-configs
new MetricsHttpAgent(new ServerHttpAgent(properties))
build
cacheData.checkListenerMd5()
启动环境配置类spring-cloud-context.jar
worker.getServerConfig
支持扩展自定义配置加载到spring Environment中,然后使用@Value注解即可读取到配置文件中的属性如果想引入其他类型的配置文件,可以实现PropertySourceLoader接口,写自定义的配置文件加载流程
刷新容器中标注@RefreshScope的类
nacosConfigProperties.setEnvironment(env)
事件机制
onApplicationEvent
启动时会加载spring-cloud-starter-alibaba-nacos-config.jar下的spring.factories文件
EventPublishingRunListener发布事件
registerNacosListenersForApplications()
继续轮询
更新本地缓存
cache.setContent(xx)
loadApplicationConfiguration
持有NacosConfigProperties和ConfigService,ConfigService用来查询 发布配置的相关接口
循环发送通知
检查本地配置
反射实例化
将cacheMap中的数量以3000个分一个组 ,分别创建一个LongPollingRunnable用于监听配置更新任务
提交任务线程
ClientWorker本本地配置没有从远程配置中心获取
if (isRefreshEnabled())
用来向nacos server发起的请求代理
ContextRefresher.refresh()
nacosConfigManager.getConfigService()
触发initialize方法
locate(Environment env)
使用一个线程的线程池启动一个定时任务 每10ms执行一次
获取配置信息,终的数据存放于Map当中NacosConfigService
@Import导入
事件回调
客户端工作类
loadExtConfiguration
Nacos配置中心启动的相关配置类
ConfigController#getConfig
spring-cloud-context.jar包下
\timplements ApplicationListener回调方法
builder.sources(new Class[]{BootstrapImportSelectorConfiguration.class})
refreshCountIncrement()原子类更新刷新总次数
触发监听者回调方法
prepareContext
完成上下文信息的准备对相关的类进行初始化操作
PropertySourceLocatorSpring cloud提供的接口
获取配置中心服务
LocalConfigInfoProcessor.getSnapshot
handle(RefreshEvent event)
AbstractSharedListener
HttpAgent调用配置中心接口
检查是否开启刷新配置默认true
LongPollingRunnable.run
加载当前应用配置文件
NacosConfigPropertiesbootstrap.properties文件属性类
监听器的回调方法
context.publishEvent(new ApplicationReadyEvent
agent.httpGet(\"/v1/cs/configs\"
loadNacosDataIfPresent
checkLocalConfig
getServerConfig
当SpringBoot项目启动的时候,会执行”准备上下文“的这么一个事情。此时NacosContextRefresher会监听到这个事件
获取成功保存到本地文件
RefreshEventListener.onApplicationEvent
executorService.execute(this)
通知逻辑包装成线程,如果线程池非空没,交给线程池处理否则直接调用run方法触发,源码中获取线程池返回null
BootstrapApplicationListener
NacosContextRefresher
Runnable.run
loadSharedConfiguration(composite)
给每个dataId注册监听器
优先从本地配置加载
new ClientWorker
加载共享的配置文件spring.cloud.nacos.config.shared-configs
createConfigService(nacosConfigProperties)
LocalConfigInfoProcessor.getFailover
NacosPropertySourceLocator加载nacos配置中心的配置信息
/v1/configs/listener配置监听接口
NacosConfigService(Properties properties)
0 条评论
回复 删除
下一页