Nacos配置中心
2024-09-06 14:55:45 0 举报
Nacos配置中心
作者其他创作
大纲/内容
ConfigFactory#createConfigService
支持长轮询的处理
直接与当前配置作比较,返回有变更的配置
已经到了超时时间,才执行里面的内容,此时可以订阅关系去掉
Nacos Server
无论配置有没有更新,最终都会进行响应,延迟29.5s执行,然后会把自己添加到一个队列中
ConfigController#publishConfig
init
NacosConfigService(Properties properties)
executorService.execute(newLongPollingRunnable(i))
getServerConfig
checkLocalConfig(cacheData)
配置中心属性配置类,对应bootstrap.properties中的配置信息
ClientWorker.LongPollingRunnable
java.lang.Runnable#run
Post请求
subscriber.onEvent(event)
长轮询
allSubs.remove(ClientLongPolling.this)
cacheMap中缓存着需要刷新的配置,将cacheMap中的数量以3000分一个组,分别创建一个LongPollingRunnable用来监听配置更新
-@Bean
ClientWorker
sendResponse(changedGroups)
clientSub.sendResponse(Arrays.asList(groupKey))
最终会调用这里
每隔10ms执行一次定时任务
HttpAgent#httpGet
iter.remove()
NacosConfigProperties
获取提前返回时间 500ms
ConfigServletInner#doPollingConfig
NacosRestTemplate#postForm
Nacos -console
NacosRestTemplate#get
readTimeoutMs=45sheader参数:Long-Pulling-Timeout=30sLong-Pulling-Timeout-No-Hangup=true
响应到客户端
NotifyCenter.publishEvent(event)
从队列中移除当前任务
/v1/cs/configs
LongPollingService类初始化的时候
ConfigExecutor.executeLongPolling
isSupportLongPolling(request)
ConfigExecutor.scheduleLongPolling
加载nacos配置中心的配置信息
调用接口:NacosRestTemplate#postForm
初始化
NacosPropertySourceLocator
创建两个线程池
执行长连接任务
MetricsHttpAgent
迭代allSubs队列
源码入口spring-cloud-starter-alibaba-nacos-config-2.2.7RELEASE.jar!/META-INF/spring.factoriesNacos配置中心启动相关的配置
ConfigController#listener
从队列取任务执行
MetricsHttpAgent#httpPost
响应配置发生变化的key
这里有个定时线程,延迟29.5秒进行执行
直接发送返回信息,并且会把延时调度任务当前的asyncTimeoutFuture结束
DefaultPublisher#publish
监听事件:LocalDataChangeEvent
调用NacosConfigService的构造器
checkConfiglnfo()
触发ConfigDataChangeEvent事件
Client
/v1/cs/configs/listener
比较客户端的md5与当前server端的是否—致,不一致的返回到changedGroups
不支持长轮询
检查本地配置
NacosConfigAutoConfiguration
用来向nacos server发起请求的代理
NotifyCenter.registerSubscriber
初始化属性超时时间30s
通知订阅者,此处也利用了阻塞队列异步处理机制
LongPollingService.DataChangeTask#run
两个线程池:1.只有一个线程的线程池,用来执行定时任务,每隔10ms执行一次checkConfiglnfo()2.线程数等于处理器个数的线程池,用来执行ClientWorker.LongPollingRunnable#run
客户端工作类
publish方法会把事件放到一个阻塞队列中,并且DefaultPublisher是一个线程,在其run方法里面会从队列中拿出事件进行处理
generateResponse(changedGroups)
allSubs.add(this)
ClientLongPolling 被提交给scheduler执行,可以拆分成4个步骤:1.创建一个调度的任务,调度的延时时间为29.5s⒉将该ClientLongPolling 自身的实例添加到一个allSubs 中去3.延时时间到了之后,首先将该ClientLongPolling自身的实例从allSubs中移除4.获取服务端中保存的对应客户端请求的groupKeys,检查是否发生变更,将结果写入response返回给客户端
循环发生变化的配置,然后拉取最新配置
NacosConfigManager
run
检查变更配置
LongPollingService.ClientLongPolling#run
用户通过nacos-console控制界面修改了配置,点击发布
ClientLongPolling clientSub = iter.next()
获取服务端发生变化的配置
持有NacosConfigProperties和ConfigService
NacosConfigManager#createConfigService
0 条评论
回复 删除
下一页