nacos配置中心源码分析——长轮询动态刷新

本文深入剖析Nacos配置中心的长轮询机制,探讨如何在Spring Cloud微服务中实现配置动态刷新。从用户在Nacos UI发布配置开始,解析服务端如何通知客户端配置变化,客户端如何通过长轮询机制接收并处理配置更新,最后总结整个动态刷新流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

发布配置

通知客户端配置变化

长轮询

客户端长轮询

服务端长轮询 

总结


所谓动态刷新是指nacos用户交互页面发布或者更新配置,在spring cloud微服务中是如何感知的,并且如何动态刷新配置?

用户操作nacos UI交互页面发布配置请求,请求url:config/v1/cs/configs。

发布配置

请求来到nacos服务端的ConfigController.publishConfig()方法,由于没有选择beta发布,所以betaIp为空,tag好像是跟容器部署有关。所以直接执行如下if里面两个核心方法:persistService.insertOrUpdate()和ConfigChangePublisher.notifyConfigChange(),

在insertOrUpdate()方法有一个蛮有意思的小窍门来区分是新增配置还是更新配置,先直接新增配置 ,如果失败抛出特定异常表示唯一约束冲突,说明数据已经存在,捕获异常后直接更新数据。

在addConfigInfo()和udateConfigInfo()中分别进行新增和更新数据:

数据库中数据更新完成完成后,回到ConfigChangePublisher.notifyConfigChange()中,它发布了ConfigDataChangeEvent事件,

在AsyncNotifyService中已经注册了该事件的订阅者,执行ConfigExecutor.executeAsyncNotify()方法创建线程池并提交异步任务AsyncTask();

进入AsyncTask,向自己发送http请求,请求连接在代码中是写死了为:/nacos/v1/cs/communication/dataChange,注意这里传递了回调的执行类AsyncNotifyCallBack,请求结束后会回调它的onReceive(),

通知客户端配置变化

请求来到CommunicationController.notifyConfigInfo(),他直接调用dump()方法向TaskManager添加异步任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值