zoukankan      html  css  js  c++  java
  • Disconf (version : 2.6.21)

    通常我们会做如下配置:(disconf 2.6.21)

    <!-- 一次扫描 -->
        <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"
            destroy-method="destory">
            <property name="scanPackage" value="com.cn.biz.config" />
        </bean>
    <!-- 二次扫描 -->
        <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"
            init-method="init" destroy-method="destory">
        </bean>

    一次扫描:

    0. ConfigMgr.init();初始化disconf-client端基础配置。

    disconf_sys.properties注入到DisClientSysConfig  (文件下载路径等等.....)

    disconf.properties注入到DisClientConfig (环境信息等等)

    1. 静态解析:解析scanPackage包下面的java类,将client端的Disconf pojo对象利用反射进行解析(Reflections工具包),组装成数据结构ScanStaticModel

    /**
     * 扫描静态存储的对象
     */
    public class ScanStaticModel {
    
        private Reflections reflections;
    
        // 所有的@DisconfFile标记的类
        private Set<Class<?>> disconfFileClassSet;
    
        // 所有的@DisconfFileItem标记的method
        private Set<Method> disconfFileItemMethodSet;
    
        // @DisconfFile与@DisconfFileItem对应关系的Map
        private Map<Class<?>, Set<Method>> disconfFileItemMap;
    
        // 配置ITEM
        private Set<Method> disconfItemMethodSet;
    
        // 主从切换的回调函数类
        private Set<Class<?>> disconfActiveBackupServiceClassSet;
    
        // 更新 回调函数类
        private Set<Class<?>> disconfUpdateService;
    
    ..........
    }
    View Code

    2. 根据基础配置,将静态解析的ScanStaticModel转换成DisconfCenterFile,为从disconf-web端下载配置文件做准备

    3. 连接Zookeeper,使用ConnectionWatcher监控连接事件

    4. 根据DisconfCenterFile中的信息,从disconf-web端下载properties文件,解析并存放到DisconfCenterFile.keyMaps   <key:配置项名称, value:配置值>

    同时,对文件进行监控,变更后通知到NodeWatcher。(NodeWatcher触发时,会更新DisconfCenterFile.keyMaps,并将值重新注入到Disconf pojo属性中),与二次扫描时的第2点类似

    ------------------------------------

    Spring容器启动,注入了切面DisconfAspectJ,所有的带有@DisconfFileItem的public方法,都会被拦截,取DisconfCenterFile.keyMaps中取值(也就是从disconf-web端下载properties文件中取值)进行返回

    ------------------------------------

    二次扫描:

    1. 注入回调方法(IDisconfUpdate的实现类)

    2. 用一次扫描中DisconfCenterFile.keyMaps中的值,将Disconf pojo属性进行填充赋值,即注入数据至配置实体中

    整体感觉数据结构比较混乱

    既然有了切面DisconfAspectJ,二次扫描中将Disconf pojo属性进行填充赋值显得没有什么用。
    确实,经过测试,去掉二次扫描的Bean DisconfMgrBeanSecond配置,也能够达到配置更改通知的效果。唯一缺少的就是配置更新后的IDisconfUpdate回调

    感觉一二次扫描合成一次扫描,配置成一个Spring Bean,二次扫描的功能在bean上配置成一个开关

    Disconf NodeWatcher是使用ZooKeeper.getData(String path, Watcher watcher, Stat stat)来实现的,ZooKeeper Watch事件是一个一次性的触发器,Watcher通知后每次又要注册一个新的NodeWatcher。不知有没有永久监听的方案?
    这个可以用zkclient.jar  curator.jar来做一直监听

    --------------------------

    disconf 2.6.36:

    DisconfDataGetter.java   : 获取配置项对应的值的API

  • 相关阅读:
    分享一个文字转成语音的工具,视频配音神器
    生手linux服务器维护常用命令记录
    信不信?各种红包App最后都会整合游戏!App+游戏的变现模式分析
    一个玩游戏的失足青年,转行做游戏开发到教育的痛苦挣扎过程(4)
    免费送!CocosCreator 6.1超级大礼包!
    一个玩游戏的失足青年,转行做游戏开发到教育的痛苦挣扎过程(3)
    【激励视频组件】零编程,即拖即用,妈妈再也不用担心小游戏 SDK 接入了!
    惊天大案!80多款游戏源码被非法倒卖交换!波及数千余人涉案!
    小游戏开发运营挣钱模型之—游戏调优篇(1)
    有个事正在悄然发生,估计谁都无法逆转!只能积极拥抱
  • 原文地址:https://www.cnblogs.com/kevin-yuan/p/6188251.html
Copyright © 2011-2022 走看看