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这一强大的分布式协调服务来实现分布式锁,以解决订单编号的唯一性问题。 ZooKeeper是由Apache Hadoop项目孵化的开源项目,它提供了一个高可用、高性能的分布式协调服务。其...
分布式锁是一种在分布式系统中实现同步的技术,它允许多个节点在同一时刻访问共享资源。在大型分布式环境中,由于网络延迟和并发操作,简单的本地锁可能无法有效解决数据一致性问题。这时,Zookeeper,一个高可用的...
基于zookeeper和强一致性复制实现MySQL分布式数据库集群.pdf
分析源码可以深入理解其内部机制,包括如何与Hadoop生态系统交互、如何处理并发请求以及如何实现文件的权限控制等。 4. 工具应用: Gi盘项目可能使用了一些常见的Hadoop生态系统工具,如Hadoop命令行工具、Hadoop...
《从Paxos到Zookeeper分布式一致性原理与实践》与《ZooKeeper-分布式过程协同技术详解》这两本书深入探讨了分布式系统中的一个重要概念——一致性,以及如何通过ZooKeeper这一工具来实现高效的分布式协同。...
在`ets-schedule`压缩包中,可能包含的是实现这个分布式调度方案的相关代码和配置文件,包括Quartz的配置、Zookeeper的连接代码以及任务调度逻辑等。通过对这些文件的分析和理解,我们可以深入学习如何在实际项目中...
本文主要讨论如何利用Zookeeper实现一些分布式应用的高级特性,包括屏障(Barriers)和双屏障(Double Barriers)。 **命名服务与配置管理** Zookeeper 提供了一种简单的键值存储结构,允许服务通过创建和读取...
《Paxos到Zookeeper——分布式一致性原理与实践》是一本深入探讨分布式一致性问题的书籍,对于理解并应用Zookeeper这一关键的分布式协调系统具有重要价值。本书旨在帮助读者掌握分布式环境中的数据一致性原理,并...
本示例将探讨如何利用Zookeeper实现分布式session。 1. **Zookeeper的基本概念** - Zookeeper是一个分布式服务框架,主要用于解决分布式应用中的数据一致性问题。 - 它提供了一种树形的数据结构,节点称为Znode,...
例如,在一个微服务架构中,不同的服务实例可以利用 ZooKeeper 存储和检索服务配置,确保所有服务实例使用的配置信息是统一且最新的。 #### 三、节点监视(Watcher) Watcher 机制是 ZooKeeper 的一个重要特性。它...
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
当需要更新配置时,可以通过Zookeeper的发布/订阅机制实时推送配置变更到各个客户端,实现配置文件在管理中心和客票交易中间件之间的快速同步。这种方式避免了传统方法中需要重启服务才能使配置生效的问题,大大减少...
本文将深入探讨如何利用ZooKeeper实现分布式Session,并通过分析提供的"基于ZooKeeper的分布式Session实现.doc"文档,解析其实现原理与步骤。 首先,理解ZooKeeper的基本概念至关重要。ZooKeeper是一个高可用、高...
ZooKeeper本质上是一个分布式的小文件存储系统,可以维护和协调分布式系统中成员列表的更新,执行故障转移和故障恢复操作,是实现分布式缓存的重要组件之一。 在分布式缓存的设计中,ZooKeeper承担的角色是协调者。...
Zookeeper是分布式计算领域广泛使用的一个开源协调服务,它主要用于分布式系统中管理和同步配置信息、命名、提供分布式锁以及群组服务等。由于其在分布式系统中的核心地位,Zookeeper的性能和稳定性直接影响到整个...
Zookeeper提供了一种类似于文件系统的数据模型,可以用于命名服务、配置管理、集群管理、分布式锁等场景。它具有强一致性、高可用性和高性能的特点,是实现分布式锁的理想选择。 **Zookeeper的分布式锁实现原理** ...
总之,Zookeeper是分布式应用程序的重要工具,它通过提供配置管理、名字服务、分布式同步和组服务等功能,有效地解决了分布式环境中的许多挑战。对于理解和使用Zookeeper-3.4.13,开发者需要深入学习其API、设计模式...