在初始化 GroupDataSource 的时候,会往它的配置管理器 DefaultDataSourceConfigManager中添加了一个配置监听器
代码路径:GroupDataSource#init() -> initConfig();
this.dataSourceConfigManager.addListerner(new GroupDataSourceConfigChangedListener()); public class GroupDataSourceConfigChangedListener implements PropertyChangeListener {@Overridepublic synchronized void propertyChange(PropertyChangeEvent evt) {**refresh**(evt.getPropertyName());}}在监听到配置变更(zk或http)的时候,会调用分组ds内部的 GroupDataSource#refresh 方法进行刷新
![s:zebra源码官网下载 [zebra源码]GroupDataSource配置变更实时生效](https://tazarkount.com/dl.php?url=https://upload-images.jianshu.io/upload_images/2732904-17c4676333c90f4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
文章插图
![s:zebra源码官网下载 [zebra源码]GroupDataSource配置变更实时生效](https://tazarkount.com/dl.php?url=https://upload-images.jianshu.io/upload_images/2732904-d9014ea71a1eada0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
文章插图
参考 分组GroupDataSource及其初始化 中初始化的写库和读库的 ds 类型
- 刷新写库
writeDataSource#refresh (FailOverDataSource#refresh)筛选配置中的第一个写库,新建SingleDataSource 替换掉老的,然后销毁老的sds - 刷新读库
readDataSource#refresh (LoadBalanceDataSource#refresh) - 筛选配置中的所有读库,新建SingleDataSource 替换掉老的,然后销毁老的sds
除了这个实时的配置更新之外,还有一个 DataSourceConfigRefresh 每隔1分钟,检查一次group分组和分组内single的配置是否发生变化; 这样就避免了 配置更新的时候由于网络异常等原因 数据源刷新失败
zebra 只支持整个GroupDataSource 粒度的配置刷新,没有单独刷新 SingleDataSource配置,不能单独调整连接池的配置
如果读写分离中其中一个db节点故障,要切换成备份节点,这个时候 zebra就只能整体变动整个Group分组,切换会比较费时; 个人觉得还是需要支持单个 db节点(SingleDataSouce)的配置变更,方便故障切换
完整目录:数据库中间件zebra源码分析
【s:zebra源码官网下载 [zebra源码]GroupDataSource配置变更实时生效】本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/15022076.html
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
