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:通用文件类型;2、properties文件类型。
<!--[if !supportLists]-->四、<!--[endif]-->注意事项
在于spring集成时候,内存配置对象尽量采用配置文件的方式,因spring在类实例化时候会优先实例化配置文件,其次是注解方式。如果延迟实例化可能会导致无法获取的内存配置对象实例。
<!--[if !supportLists]-->
五、<!--[endif]-->ZkConfig API说明
开源地址: https://github.com/QuanZhong/ZKConfig
相关推荐
基于zookeeper和强一致性复制实现MySQL分布式数据库集群.pdf
利用zookeeper的临时顺序节点实现分布式锁,同时控制多个quartz示例协作执行的代码。
在分布式高并发的情况下,多个访问之间拥有唯一的一个订单编号,多次提交的订单不会出现重复的,只能是唯一的,ZooKeeper就很好的解决了唯一性
Zookeeper伪分布式集群搭建描述伪分布式集群就是在一台机器部署多个zk应用,部署之前服务器需要有jdk环境 java -version可以显示相关java
基于zookeeper的分布式锁简单实现,包含测试代码,实用工具类
zookeeper实现分布式session sample
从Paxos到Zookeeper分布式一致性原理与实践 + ZooKeeper-分布式过程协同技术详解
ZooKeeper 是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等
《Paxos到Zookeeper——分布式一致性原理与实践》,学习zookeeper必备。该资源仅供大家了解书的内容,如果真有兴趣深入学习,建议购买正版书籍。
zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是集群的管理者。提供了文件系统和通知机制。...在开发项目的过程中,很多大型项目都是分布式部署的,那么我们现在使用zookeeper实现一个分布式锁。
hadoop-2.7.3+zookeeper-3.4.8+hadoop-2.7.3分布式环境搭建整理(王三旗亲试成功安装)
Zookeeper实现分布式锁的Demo Zookeeper实现分布式锁的Demo
ZooKeeper是一个开源的分布式协调服务框架,它用于管理大型分布式系统中的数据一致性和同步。在分布式环境中,ZooKeeper通过其高效的节点管理、数据同步和分布式锁等功能,为集群提供了稳定可靠的协调服务。 在搭建...
可能秒杀架构原理大家都懂,网上也有不少实现方式,但大多都是文字的描述,告诉你如何如何,什么加锁、缓存、队列之类。但很少全面有的案例告诉你如何去做,既然是从0到1,希望以下代码案例可以帮助到你。当然最终...
ZooKeeper是一个分布式协调服务,主要用于维护配置信息、命名、提供分布式同步和提供组服务等。在分布式系统中,ZooKeeper常被用作服务发现、分布式锁、领导选举等场景。下面将详细介绍如何在分布式环境中搭建...
ZkConfig 目前支持所有种类配置文件的同步更新,仅支持扩展名为 .properties 与 .cfg 结尾的健值对文件格式的内存数据对象实时同步。其余配置文件仅支持磁盘数据同步。 本代码是在 QuanZhong/ZKConfig 的代码基础...
在java中对于同一个jvm而言,jdk已经提供了lock和同步等。但是在分布式情况下,往往存在多个进程对一些资源产生竞争关系,而这些进程往往在不同的机器上,这个时候jdk中提供的已经不能满足。分布式锁顾明思议就是...
springboot redis zookeeperlock rabbit实现的分布式锁 代码
zookeeper客户端。分布式锁。 demo。。