disconf原理解析

半腔热情 提交于 2020-01-08 01:04:33

前有了解过disconf,也知道它是基于zookeeper来做的,特意写了文章记录下自己的见解。如有错误,欢迎指正。

 

1、disconf-web会在启动时,将自身的host和配置文件注册到zookeeper上。配置文件会在zk上生成node。

2、client 端启动时,会有一个BeanDefinitionRegistryPostProcessor的实现类DisconfMgrBean,该类主要你实现了扫描(firstScan,加载系统配置和配置文件,进行包扫描并入库,然后获取获取数据/注入/Watch。)、注册DisconfAspectJ(切面,判断是否启用了ENABLE_DISCONF注解,返回disconf仓库中对应的属性值) 和 bean属性注入(获取仓库中对应的属性值,通过setMethod.invoke或者field.set方法来设置值)。

3、disconf的配置动态更新借助于zk的watch机制(watch机制是zk 3大重要内容之一,其余两个是zk协议和node存储模型)实现的,初始化流程会中会对配置文件注册watch,这样当配置文件更新时,zk会通知到client,然后disconf-client再从disconf-web中获取最新的配置并更新到本地,这样就完成了配置动态更新。

小结:disconf更新配置 -> disconf-web保存配置到DB->更新zookeeper上node信息 -> zookeeper通知client有配置更新 -> client 从 disconf-web下载对应配置 -> 更新仓库和bean属性 -> 调用回调信息到ZK,让ZK知道已经更新了node -> 更新配置完成。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!