nacos架构-配置中心源码
2021-10-31 23:11:22 4 举报
nacos架构-配置中心源码
作者其他创作
大纲/内容
NacosConfigService#getConfigInner
nacos-8847
NacosContextRefresher#registerNacosListener
DumpService#dump
DumpAllProcessor#process
nacos集群
@Bean
ConfigCacheService#dump
RefreshScope#refreshAll
ExternalStoragePersistServiceImpl#findAllConfigInfoFragment
NacosPropertySourceLocator
ConfigFileApplicationListener#load
NacosPropertySourceLocator#locate
mall-order
③插入历史表
implement
AbstractSharedListener#innerReceive
spring-cloud-starter-alibaba-nacos-config下的NacosConfigAutoConfiguration
mysql
ExternalStoragePersistServiceImpl#insertConfigHistoryAtomic
springboot 启动流程SpringApplication#main
那外置mysql是用来干什么的呢?
ApplicationContextInitializer
① 获取nacos配置
ConfigChangePublisher#notifyConfigChange
1.服务端本地是否有持久化,和外置mysql如何保证数据一致性2.配置变更是如何通知到客户端侧的?3.配置在集群中是如何转载的?4.
DefaultPublisher#run
ConfigController#getConfig
NacosContextRefresher#onApplicationEvent
从这里就可以看优先级,因为是头插法所以优先级是${spring.application.name}-${profile}.${file-extension:properties}#${spring.application.name}.${file-extension:properties}#${spring.application.name}#extensionConfigs#sharedConfigs
com.alibaba.nacos.config.server.utils.DiskUtil#saveToDisk
会将nacos配置构建propertySource并加载resource下的bootstrap.properties和application.properties并且bootstrap.properties优先级要高于application.properties
NacosConfigService#getConfig
发布配置 post: /v1/cs/configs
服务端启动将配置从mysql load到本地disk
PropertySourceBootstrapConfiguration#initialize
将下面6个配置合并到CompositePropertySource
SpringApplication#refreshContext
ApplicationListener
DataChangeTask#run
插入配置
可以看到配置是从服务端本地磁盘中获取返回的
localCache
nacos-web
SpringApplication#prepareEnvironment
RefreshEventListener#onApplicationEvent
BlockingQueue#take
ContextRefresher#refresh
②推送配置变化给客户端LongPollingService
销毁所有,重建bean
①通知集群其他节点AsyncNotifyService
server
SpringApplication#afterRefresh
diskFile
优先从本地获取,本地为空,才从远端获取,并更新到本地
AsyncNotifyService.AsyncTask#run
在客户端侧为每个dataId注册配置变更事件
发布RefreshEvent事件
NacosRefreshHistory#addRefreshRecord
服务端获取配置 get /v1/cs/configs
nacos-8848
File
java.util.concurrent.BlockingQueue#offer(E)
ExternalStoragePersistServiceImpl#addConfigTagsRelation
NacosContextRefresher
C:\\Users\mj\acos\\data\\config-data\\DEFAULT_GROUP
DefaultPublisher#receiveEvent
1.nacos-web新增配置、修改、删除 mall-order是如何自动感知的?2.nacos-web配置信息在集群是如何实现同步的?3.
调用该方法加载nacos配置
①更新历史
nacos-8849
② 发布客户端接受到变更事件
spring-cloud-starter-alibaba-nacos-config下的NacosConfigBootstrapConfiguration
NacosPropertySourceLocator.locate
ConfigController#publishConfig
PropertySourceBootstrapConfiguration实现了spring的ApplicationContextInitializer,sping启动会调用PropertySourceBootstrapConfiguration的initialize方法
ExternalDumpService#init
①持久化操作
get http://192.168.0.103:8847/nacos/v1/cs/communication/dataChange?dataId=test&group=DEFAULT_GROUP
ExternalStoragePersistServiceImpl#addConfigInfoAtomic
②插入关系表
②发布配置变更消息,通知客户端
DiskUtil#targetTagFile
NotifyCenter#publishEvent
ApplicationEventPublisher#publishEvent(org.springframework.context.ApplicationEvent)
服务端启动将mysql文件dump一份到本地文件
ExternalStoragePersistServiceImpl#addConfigInfo
com.alibaba.nacos.common.notify.listener.Subscriber#onEvent
SpringApplication#prepareContext
DumpService#dumpConfigInfo
PropertySourceLocator
CommunicationController#notifyConfigInfo
分页将mysql配置更dump到本地磁盘
LocalConfigInfoProcessor#getFailover
0 条评论
下一页