Disconf
通常我们会做如下配置:(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; ..........
}
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
Disconf的更多相关文章
- disconf搭建
简介: Distributed Configuration Management Platform(分布式配置管理平台) 它是百度的一套完整的基于zookeeper的分布式配置统一解决方案,具有如下特 ...
- 统一配置管理-百度disconf
之前一直采用properties文件管理配置信息,若是集群则每个机器上都要拷贝一份,每次修改也需要依次修改.一直在寻找统一修改,实时生效,方便修改,分环境分系统的配置管理,自己也在整理设计,若找不到合 ...
- 配置管理服务diamond和disconf横向对比
Diamond则是淘宝开源的一种分布式配置管理服务的实现 disconf是来自百度的分布式配置管理平台,包括百度.滴滴出行.银联.网易.拉勾网.苏宁易购.顺丰科技 等知名互联网公司正在使用! 对比项目 ...
- disconf系列【2】——解决zk部署情况为空的问题
如下图所示,在安装完成之后,发现zk(zookeeper)部署情况为空. 注:承接上篇,环境未发生改变. 1.解决zk没有启动的问题 查看disconf日志,发现zk没有启动. 实际情况是:zk已经启 ...
- disconf系列【1】——百度disconf在ubuntu14.04环境下的安装
disconf官网给出的安装文档默认读者已经非常熟练本文1.2章节给出的依赖软件的原理及使用方法,且官网默认安装环境为linux(windows安装方法只字未提).同时,官网对很多重要的细节语焉不详, ...
- disconf使用
1.创建app,确定version 2.创建配置文件redis.config 3.选择app下env环境,上传redis.config到disconf 4.创建disconf.properties到c ...
- disconf安装部署
1.client pom文件引入 <dependency> <groupId>com.baidu.disconf</groupId> <artifactId& ...
- disconf实践(二)
因为有些系统的配置文件会随着业务更改,如某些控制开关,当大批量集群时,按照上一篇文章的配置就不够啦,需要做到热加载. 研究了一下,还好,比较简单,只要替换上一篇文章第4步的配置文件(spring-di ...
- disconf实践(一)
公司目前的应用基本采用分布式部署,通过F5进行集群管理.分布式应用带来的好处是,随着流量的增加,可以快速扩展应用节点,分摊压力.分布式也会带来一定的挑战,譬如配置文件管理.如果某个配置要修改,那么所有 ...
随机推荐
- UIView---汇总
视图.绘图.贴图.手势.变形.布局.动画.动力.特效 UIBezierPath.UIGestureRecognizer.CGAffineTransform.frame.bounds.center.tr ...
- [转] LBYL与EAFP两种防御性编程风格
检查数据可以让程序更健壮,用术语来说就是防御性编程.检查数据的时候,有这样的两种不同的风格.LBYL:Look Before You Leap EAFP:Easier to Ask Forgiven ...
- hhvm之轻进程
本文为原创,转载请注明:http://www.cnblogs.com/gistao/ 背景 我们在aws上部署了hhvm,高峰段发现cpu idle降的比较低,只有10-20%,而使用php-fpm的 ...
- (整理) JQuery中的AJAX
$(document).ready(function () { $("#search").click(function () { $.ajax({ type:"GET&q ...
- socket实现手机连接网络打印机打印pos单
打印的工具类: public class PrintLine { String TAG = "xxl"; static String PRINT_IP = "192. ...
- js-PC版监听键盘大小写事件
//获取键盘按键事件,可以使用keyup. //问题:获取到键盘的按下Caps lock键时,不能知道当前状态是大写.还是小写状态. //解决: 设置一个全局判断大小写状态的 标志:isCapital ...
- hiho一下123周 后缀数组四·重复旋律
后缀数组四·重复旋律4 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...
- 一些好的python IDE
pyscipter 是一个不错的选择,快速灵巧.功能丰富.它的安装包只有五六兆,功能却一个都不少.语法高亮功能也很强,运算符.数字.hex都能按照你的需要改变颜色.还有非常灵敏的code comple ...
- Ext.Net 学习随笔 003 Panel基本使用
Panel() 1.使用Content和Html属性设置Panel内容 前台View代码 @(X.Panel() .ID("panel1") .Width() .Height() ...
- easycwmp的编译
原创作品,转载请注明出处,严禁非法转载. copyright:weishusheng 2015.3.18 email:642613208@qq.com 注:此处的编译指的是直接用系统自带的gcc编 ...