目录
所谓动态刷新是指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添加异步任务
上篇博客已经分析了TaskManager及其父类Na