Nacos 配置中心原理-客户端
2024-11-19 15:15:50 3 举报
Nacos 配置中心原理的客户端部分主要包括以下几个关键步骤: 1. 客户端启动时,会主动向Nacos服务端发送请求,请求包含客户端的基本信息,如IP地址、端口等。 2. 服务端在收到客户端的请求后,会将该客户端的信息存储在一个内部存储中,用于后续配置更新时通知客户端。 3. 客户端通过长轮询的方式,定时向Nacos服务端发送请求,查询配置是否有更新。 4. 如果服务端检测到配置有更新,则会将更新的配置数据发送给客户端。 5. 客户端在收到更新后的配置数据后,会与本地的配置数据进行对比,如果有差异,则会进行更新。 6. 客户端在更新配置后,会向服务端发送确认消息,告知服务端配置更新已完成。 7. 在配置更新过程中,Nacos服务端会维护一个配置更新日志,用于记录每次配置的更新情况。 整个过程保证了客户端能够及时获取到最新的配置数据,并且具有一定的容错能力。
作者其他创作
大纲/内容
ConfigService
本地缓存的 MD5 和服务端的做对比
NacosConfigService
nacos console 更新配置
NacosConfigBootstrapConfiguration
加载共享配置信息
发布EnvironmentChangeEvent事件
publishEvent(new RefreshEvent())
添加任务到线程池
checkListenerMd5
监听
refreshCountIncrement()
AbstractSharedListener
实现 innerReceive()
configService.addListener()
自增刷新计数
onApplicationEvent()
executeConfigListen()
nacos-config
NacosConfigAutoConfiguration
发布刷新事件
构造函数入参
listener.receiveConfigInfo()
EnvironmentChangeEvent
refreshEnvironment()
RefreshAutoConfiguration
初始化 bean
推送新配置数据给监听者
addCacheDataIfAbsent()
CompositePropertySource实例
buildConfigRequest()
refreshContentAndCheck()
刷新环境,更新配置中的信息
getConfig()
全量同步,查询配置更新
loadApplicationConfiguration()
运行时重新初始化 Bean
如果配置有更新
ApplicationReadyEvent
spring-cloud-starter-alibaba-nacos-config-2021.0.5.0.jar
使用线程调度任务+while 循环+阻塞队列实现持续监听配置
NacosPropertySourceLocator
spring boot 启动
registerNacosListenersForApplications()
RefreshEventListener
创建 agent ConfigTransportClient
复合数据源
接收最新配置信息
loadSharedConfiguration()
加载扩展配置信息
装饰监听者,并添加到 cache 上
NacosConfigManager
ConfigurationPropertiesRebinder
loadSpringFactories
更新监听者装饰器的 md5
Spring 应用程序的上下文完全启动后触发
NacosContextRefresher
加载应用配置信息
发布、获取、移除、监听配置
loadExtConfiguration()
NacosConfigProperties
RefreshEvent
管理和操作 Nacos 配置
cache.addListener()
getServerConfig()
safeNotifyListener
配置中心属性配置类,对应 bootstrap.properties中 nacos 的配置
nacosRefreshHistory.addRefreshRecord
rebind()
不需要全量同步
给所有应用级别的 dataId 添加监听器
加载服务端配置信息
ContextRefresher#refresh()
刷新历史
startInternal()
receiveConfigInfo()
添加刷新历史记录
@Component
registerNacosListener()
removeConfig()
agent.start()
销毁 bean
添加监听者
SpringFactoriesLoader#loadFactoryNames
重新绑定
加载spring.factories
destroyBean(bean)
locate()
如果缓存和监听者的 md5 不一致
publishConfig()
spring-cloud-context
动态监听和更新配置
requestProxy()
worker.addTenantListeners()
创建ClientWorker实例
implements
从服务端拉取最新配置
INTERNAL_NOTIFIER.submit(job)
创建Runnable任务
更新本地缓存并检查监听器的 md5
addListener()
spring-cloud-context-3.1.5.jar
handle()
NacosRefreshHistory
0 条评论
下一页