设为首页 收藏本站
查看: 2499|回复: 0

[经验分享] zookeeper 配置中心——利用ZkConfig实现分布式配置文件实时同步

[复制链接]

尚未签到

发表于 2017-4-19 13:10:45 | 显示全部楼层 |阅读模式
ZkConfig使用说明

源码:github: https://github.com/QuanZhong/ZKConfig

 
<!--[if !supportLists]-->一、<!--[endif]-->简介
ZkConfig是为zookeeper开发的配置服务工具包,能与现有的Java系统进行良好的集成,也可以使用与非java系统以独立进程运行。提供与spring进行集成的插件。采用注解方式对需要动态更新的内存数据对象进行标注。
ZkConfig用于解决在系统集群中配置文件的实时同步。当任意一台服务器配置文件发生变化的时候,所有集群服务器配置文件实现同步更新,并且在不启动web容器的情况下,实现内存配置对象的实时更新。
目前支持所有种类配置文件的同步更新,仅支持扩展名为.properties.cfg结尾的健值对文件格式的内存数据对象实时同步。其余配置文件仅支持磁盘数据同步。
<!--[if !supportLists]-->二、<!--[endif]-->使用说明
使用步骤:
<!--[if !supportLists]-->1、<!--[endif]-->增加虚拟机启动参数配置
运行zkconfig需要增加虚拟机运行参数 app.instance.config 的配置。app.instance.config 值为配置文件目录,将zkconfig.properties文件置于该目录下。
<!--[if !supportLists]-->2、<!--[endif]-->为需要动态更新的配置类对象增加@ZkValue注解
例:
//@ZkConfig(hosts = "127.0.0.1:2181")
public class TestObj {
 
@ZkValue(key = "ip")
private String ip;
@ZkValue(key = "port")
private int port;
private String sth;
 
//getter,setter
}
@ZkValue注解中key值为配置properties文件中的key值,仅仅有此注解的属性会被实时更新。
@ZkConfig注解与配置对象上,非必须,这里配置zookeeper服务器连接信息,此配置可以配置与zkconfig.properties文件中。
<!--[if !supportLists]-->3、<!--[endif]-->配置zkconfig.properties文件
将zkconfig.properties文件复制到虚拟机运行参数 app.instance.config 所配置的目录下。
hosts=127.0.0.1:2181
Zookeeper集群连接字符串,以逗号分隔eg:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
sessionTimeout=5000
会话超时时间
app_name=cs
当前系统的应用名称,此项必填用于区分不同系统的配置文件
app_config_paths=${app.instance.config}
需要同步的系统配置文件目录集合,以逗号分隔eg:/data/config/v-crm,/data/config/v-cs
dir_watch_period=3000
文件目录监控频率单位毫秒,用于监控配置文件的变化
<!--[if !supportLists]-->4、<!--[endif]-->向ZkConfig注册内存配置对象实例(这里注册是实例,不是类型)
//创建注册中心
BeanRegisterCenter brc = new BeanRegisterCenter();
//注册实例,有多个就注册多个
brc.register(new TestObj());
此步骤非必须,如果不想更新内存数据,此步骤与步骤2都可以忽略。
<!--[if !supportLists]-->5、<!--[endif]-->启动数据监听
//2、执行监听
MonitorType type = MonitorFactory.MonitorType.CONF_PROPERTIES_FILE_MONITOR;
ZkConfigExecutor.execute(type);
MonitorType 为监听类型枚举,目前支持通用文件类型监听以及Properties配置文件监听,后续可二次扩展。
示范代码(方式1):
/**
* run local example
* @param args
*/
public static void main(String[] args) {
CountDownLatch connectedSignal = new CountDownLatch(1);
try {
//1、注册配置所需配置类
BeanRegisterCenter brc = new BeanRegisterCenter();//执行监听
brc.register(new TestObj());
//2、执行监听
MonitorType type = MonitorFactory.MonitorType.CONF_PROPERTIES_FILE_MONITOR;
ZkConfigExecutor.execute(type);
 
connectedSignal.await();
} catch (Exception e) {
e.printStackTrace();
}
}
也可以采用方式二运行
 
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
List<Object> confInstances = new ArrayList<Object>();
confInstances.add(new TestObj());
ZkConfigScannerConfigurer zk = new ZkConfigScannerConfigurer();
zk.setMonitorType(2);
zk.setConfInstances(confInstances);
zk.startWatch();
 
 
}
 
<!--[if !supportLists]-->三、<!--[endif]-->与spring集成
spring.xml配置文件中加入如下配置即可实现集成:
<bean id="testConfig" class="com.lashou.cs.TestConfig"></bean>
<bean id="zkConfigScannerConfigurer" class="com.lashou.v.zkconfig.springplugin.ZkConfigScannerConfigurer" scope="singleton" lazy-init="false">
<property name="confInstanceNames"> 
<list>
<value>testConfig</value>
</list>
</property>
<property name="monitorType" value="2" />
</bean>
 
testConfig为内存数据同步对象。confInstanceNames为内存同步对象名称集合。monitorType为监听文件类型,1:通用文件类型;2properties文件类型。
 
<!--[if !supportLists]-->四、<!--[endif]-->注意事项
在于spring集成时候,内存配置对象尽量采用配置文件的方式,因spring在类实例化时候会优先实例化配置文件,其次是注解方式。如果延迟实例化可能会导致无法获取的内存配置对象实例。
<!--[if !supportLists]-->
五、<!--[endif]-->ZkConfig API说明
开源地址: https://github.com/QuanZhong/ZKConfig
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366459-1-1.html 上篇帖子: LSF系列-使用zookeeper实现的简单的集群服务管理 下篇帖子: 深入浅出Zookeeper之七分布式CREATE事务处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表