[转载请注明作者和原文链接, 如有谬误, 欢迎在评论中指正. ]
ZooKeeper提供了Java和C的binding. 本文关注Java相关的API.
准备工作
拷贝ZooKeeper安装目录下的zookeeper.x.x.x.jar文件到项目的classpath路径下.
创建连接和回调接口
首先需要创建ZooKeeper对象, 后续的一切操作都是基于该对象进行的.
ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException
以下为各个参数的详细说明:
- connectString. zookeeper server列表, 以逗号隔开. ZooKeeper对象初始化后, 将从server列表中选择一个server, 并尝试与其建立连接. 如果连接建立失败, 则会从列表的剩余项中选择一个server, 并再次尝试建立连接.
- sessionTimeout. 指定连接的超时时间.
- watcher. 事件回调接口.
注意, 创建ZooKeeper对象时, 只要对象完成初始化便立刻返回. 建立连接是以异步的形式进行的, 当连接成功建立后, 会回调watcher的process方法. 如果想要同步建立与server的连接, 需要自己进一步封装.
public class ZKConnection { /** * server列表, 以逗号分割 */ protected String hosts = "localhost:4180,localhost:4181,localhost:4182"; /** * 连接的超时时间, 毫秒 */ private static final int SESSION_TIMEOUT = 5000; private CountDownLatch connectedSignal = new CountDownLatch(1); protected ZooKeeper zk; /** * 连接zookeeper server */ public void connect() throws Exception { zk = new ZooKeeper(hosts, SESSION_TIMEOUT, new ConnWatcher()); // 等待连接完成 connectedSignal.await(); } public class ConnWatcher implements Watcher { public void process(WatchedEvent event) { // 连接建立, 回调process接口时, 其event.getState()为KeeperState.SyncConnected if (event.getState() == KeeperState.SyncConnected) { // 放开闸门, wait在connect方法上的线程将被唤醒 connectedSignal.countDown(); } } } }
创建znode
ZooKeeper对象的create方法用于创建znode.
String create(String path, byte[] data, List acl, CreateMode createMode);
以下为各个参数的详细说明:
- path. znode的路径.
- data. 与znode关联的数据.
- acl. 指定权限信息, 如果不想指定权限, 可以传入Ids.OPEN_ACL_UNSAFE.
- 指定znode类型. CreateMode是一个枚举类, 从中选择一个成员传入即可. 关于znode类型的详细说明, 可参考本人的上一篇博文.
/**
* 创建临时节点
*/
public void create(String nodePath, byte[] data) throws Exception {
zk.create(nodePath, data, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
}
获取子node列表
ZooKeeper对象的getChildren方法用于获取子node列表.
List getChildren(String path, boolean watch);
watch参数用于指定是否监听path node的子node的增加和删除事件, 以及path node本身的删除事件.
判断znode是否存在
ZooKeeper对象的exists方法用于判断指定znode是否存在.
Stat exists(String path, boolean watch);
watch参数用于指定是否监听path node的创建, 删除事件, 以及数据更新事件. 如果该node存在, 则返回该node的状态信息, 否则返回null.
获取node中关联的数据
ZooKeeper对象的getData方法用于获取node关联的数据.
byte[] getData(String path, boolean watch, Stat stat);
watch参数用于指定是否监听path node的删除事件, 以及数据更新事件, 注意, 不监听path node的创建事件, 因为如果path node不存在, 该方法将抛出KeeperException.NoNodeException异常.
stat参数是个传出参数, getData方法会将path node的状态信息设置到该参数中.
更新node中关联的数据
ZooKeeper对象的setData方法用于更新node关联的数据.
Stat setData(final String path, byte data[], int version);
data为待更新的数据.
version参数指定要更新的数据的版本, 如果version和真实的版本不同, 更新操作将失败. 指定version为-1则忽略版本检查.
返回path node的状态信息.
删除znode
ZooKeeper对象的delete方法用于删除znode.
void delete(final String path, int version);
version参数的作用同setData方法.
其余接口
请查看ZooKeeper对象的API文档.
需要注意的几个地方
- znode中关联的数据不能超过1M. zookeeper的使命是分布式协作, 而不是数据存储.
- getChildren, getData, exists方法可指定是否监听相应的事件. 而create, delete, setData方法则会触发相应的事件的发生.
- 以上介绍的几个方法大多存在其异步的重载方法, 具体请查看API说明.
相关推荐
Zookeeper Java API 使用指南 Zookeeper 是一个广泛使用的分布式协调服务,提供了高效、可靠、可扩展的解决方案。Java API 是 Zookeeper 的一个重要组件,提供了丰富的接口让开发者可以轻松地使用 Zookeeper。下面...
4. **数据操作**:Curator 提供了简单的 API 来读写 ZooKeeper 节点的数据,如 `create()`, `setData()`, `getData()` 等。例如,创建节点和设置数据: ```java client.create().creatingParentsIfNeeded().for...
ZooKeeper Java API编程实例分析 ZooKeeper Java API编程是 ZooKeeper 的一个重要组件,它提供了 Java 语言的 API 接口,让开发者可以使用 Java 语言编写 ZooKeeper 应用程序。下面我们将详细分析 ZooKeeper Java ...
**Zookeeper API(Java)入门详解** Zookeeper是一款分布式协调服务,由Apache基金会开发,它为分布式应用提供一致性服务,包括命名服务、配置管理、集群同步、分布式锁等。在Java开发中,我们通常会使用Zookeeper...
在IT行业中,Zookeeper和Java API的结合使用是分布式系统管理的重要组成部分。Zookeeper是由Apache软件基金会开发的一个开源项目,它提供了一种高效且可靠的分布式协调服务,常用于配置管理、命名服务、集群管理和...
zookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例.zipzookeeper-api基础java案例....
在本文中,我们将深入理解Zookeeper的基本操作,包括通过shell客户端进行交互,以及使用Java API进行编程,并探讨其在实际应用中的示例。 一、Zookeeper Shell操作 1. 连接Zookeeper客户端:使用`zkCli.sh`命令...
Zookeeper Api(java)入门与应用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储...
在Java开发中,我们通常使用三种方式来操作Zookeeper:原生API、zkClient和Curator。接下来,我们将详细探讨这三种方式。 **一、Zookeeper原生API** Zookeeper提供了Java API,可以直接与Zookeeper服务器进行交互...
在Java环境中,ZooKeeper提供了一套丰富的API,使得开发者能够方便地进行节点操作和Watch机制的使用。本篇文章将深入探讨如何使用Java API在ZooKeeper中进行节点的操作,并介绍Watch观察者的应用。 1. **ZooKeeper...
它的客户端API是开发者与ZooKeeper交互的主要接口,提供了丰富的功能,包括数据节点的创建、删除、更新、读取,以及监控事件的订阅等。本文将深入探讨ZooKeeper客户端API的使用方法和核心概念。 ### 1. 连接...
2. **Zookeeper Java API**:Apache ZooKeeper提供了Java API供开发者进行编程,用于实现分布式服务管理。在Java项目中,我们通常通过Maven或者Gradle来引入Zookeeper的依赖,如上述代码所示引入的是`org.apache....
Java提供了ZooKeeper的API,使得我们可以方便地进行节点的创建、读取、更新和删除操作。`01_zookeeper介绍和应用场景.docx`、`02_使用java操作zookeeper创建节点.docx`、`03_使用java操作zk创建节点02.docx`这些文档...
ZooKeeper API是开发者与ZooKeeper交互的主要方式,它提供了丰富的Java客户端接口,使得开发者能够方便地进行数据的读写、监控节点变化、创建和删除节点等操作。以下是一些关键的ZooKeeper API知识点: 1. **连接与...
ZooKeeper Java API 是一套用于与ZooKeeper交互的接口,它允许开发者在Java应用程序中实现对ZooKeeper集群的创建、删除、查看、设置和权限管理等操作。ZooKeeper是一个分布式的协调服务,广泛应用于分布式系统中,如...
本文将深入探讨如何使用Java客户端API来对Zookeeper的Znode进行增删改查操作,并讨论同步与异步两种方式的使用。 首先,要使用Java客户端API访问Zookeeper,你需要引入相关的依赖。在Maven项目中,可以在pom.xml...
4. **slf4j-api.jar**:Simple Logging Facade for Java,它提供一个简单的API,使得最终用户可以在部署时插入所需的日志库,比如log4j。SLF4J允许在部署时选择不同的日志实现,提高了灵活性。 5. **slf4j-log4j12....
使用JMX监控Zookeeper状态Java API 在分布式系统中,Zookeeper是经常使用的分布式协调服务,用于维护和管理分布式应用程序的配置信息和状态。为了监控Zookeeper的状态,需要使用监控工具来实时监控Zookeeper的运行...