如下是根据官方接口文档(http://zookeeper.apache.org/doc/r3.4.1/api/org/apache/zookeeper/ZooKeeper.html#register(org.apache.zookeeper.Watcher)及源码注释进行提炼,以指导对zookeeper的开发。

1、创建zookeeper节点:create(String path, byte[] data, List<ACL> acl, CreateMode createMode)

1)若已创建的节点已经存在,则会抛出异常:KeeperException.NodeExists,创建操作之前需要判断节点是否已经存在;

2)若父节点不存在,则抛出异常:KeeperException.NoNode,因此,当节点路径是多层,需要逐层创建节点;

3)若创建路径的父节点为临时节点,则抛出异常:KeeperException.NoChildrenForEphemerals,记孩子节点不能有子节点;

4)若数据大小超出1M,则抛出异常:KeeperExecption。

2、关闭连接:public void close()

一旦客户端被关闭,对用的回话将会失效。同时,在zookeeper服务器上和该回话相关的临时节点都将被删除。

3、删除给定路径节点:delete(String path, int version)

    1)如果version为-1,则匹配节点的任何版本;

2)如果节点不存在,则抛出异常:KeeperException.NoNode,则删除操作前需要西安判断路径对应节点是否存在;

3)如果version的值和节点版本号不匹配,则抛出异常:KeeperException.BadVersion;

4)如果节点还有孩子节点,则抛出异常:KeeperException.NotEmpty。

4、设置给点节点的数据:setData(String path, byte[] data, int version)

    1)如果version为-1,则匹配节点的任何版本;

2)如果给定路径节点不存在,则抛出异常:KeeperException.NoNode,因此执行设置操作之前,需要先判断节点是否存在;

3)如果给定版本和节点版本不匹配,则抛出异常:KeeperException.BadVersion;

4)若数据大小超出1M,则抛出异常:KeeperExecption。

5、判断指定路径节点是否存在,exists(String path, Watcher watcher)

1)如果节点不存在,则返回null;

2)如果watcher非null,且操作执行成功时,将观察给定路径的节点;

3)对给定路径节点的增加/删除成功操作,以及对该节点数据的成功设置,都将触发该观察。

6、获取给定路径节点的数据:byte[] getData(String path, Watcher watcher, Stat stat)

1)如果watcher非null,且操作执行成功时,将观察给定路径的节点;

2)对给定路径节点的删除成功操作,以及对该节点数据的成功设置,都将触发该观察。

3)若给定路径节点不存在,则抛出异常:KeeperException.NoNode;

7、获取给定路径节点的孩子列表:List<String> getChildren(final String path, Watcher watcher)

    1)如果watcher非null,且操作执行成功时,将观察给定路径的节点;

2)对该路径节点的成功删除操作,以及成功创建或删除该节点的孩子节点,都会出发该观察;

3)返回的孩子节点将不被排序,既不保证是字典或自然序。

8、获取给定路径节点的孩子列表及状态结构:List<String> getChildren(String path, boolean watch, Stat stat)

9、注册默认观察:void register(Watcher watcher)

10、sync()方法的使用:

如果客户端A将一个节点/a的值从0修改为1,然后通知客户端B读取/a,客户端B读取到的值可能还是0,这取决于它连接到了哪个服务器。如果客户端A和B读取到相同的值很重要,那么客户端B应该在执行读取之前调用sync()方法。

11、构造函数,创建zookeeper客户端对象:ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

1)回话的创建是异步的,既回话可能在该函数返回之后才能创建完成;

2)状态的任何变化,都将被通知给watcher,但是,在构造器返回前后都有可能接到通知;

3)客户端在和server建立连接时,将从字符串connectString中随机选择一个IP进行连接。

zookeeper[3] zookeeper API开发注意事项总结的更多相关文章

  1. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  2. java EE技术体系——CLF平台API开发注意事项(2)——后端测试

    前言:上篇博客说到了关于开发中的一些情况,这篇博客主要说明一些关于测试的内容. 一.宏观说明 要求:每一个API都必须经过测试.   备注:如果涉及到服务间调用(如权限和基础数据),而对方服务不可用时 ...

  3. java EE技术体系——CLF平台API开发注意事项(1)——后端开发

    前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...

  4. java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制

    前言:提离职了,嗯,这么多年了,真到了提离职的时候,心情真的很复杂.好吧,离职阶段需要把一些项目中的情况说明白讲清楚,这篇博客就简单说一下在平台中对API所做的安全处理(后面讲网关还要说,这里主要讲代 ...

  5. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  6. Zookeeper详解-API(六)

    ZooKeeper有一个绑定Java和C的官方API.Zookeeper社区为大多数语言(.NET,python等)提供非官方API.使用ZooKeeper API,应用程序可以连接,交互,操作数据, ...

  7. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  8. Linux -- 基于zookeeper的java api(一)

    Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...

  9. ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用

    这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...

随机推荐

  1. 【转】iOS实时卡顿监控

    转自http://www.tanhao.me/code/151113.html/ 在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件 ...

  2. jdbc03 使用servlet实现

    <%@page import="cn.bdqn.bean.News"%> <%@page import="cn.bdqn.service.impl.Ne ...

  3. 通过安全策略限制局域网部分IP访问我的电脑

    一旦电脑连上局域网,那么别人就容易进入自己的电脑,造成隐私被泄漏,这是我们最不愿发生的情况.因此,如果你的电脑并不需要向局域网其他用户共享资料,那么就建议采用策略,禁止局域网电脑访问自己的电脑,以保证 ...

  4. Hadoop源码解析之 rpc通信 client到server通信

    rpc是Hadoop分布式底层通信的基础,无论是client和namenode,namenode和datanode,以及yarn新框架之间的通信模式等等都是采用的rpc方式. 下面我们来概要分析一下H ...

  5. iOS9.3 Could not find Developer Disk Image 真机调试错误解决办法

    昨天手机系统升级9.3,到了公司真机测试的时候发现Xcode(7.2.1)报错:Could not find Developer Disk Image , 这是因为我的Xcode7.2中还没有支持9. ...

  6. nodejs概论

    我将在此写下自己读<Node.js开发指南>一书的笔记,以便于以后的学习. 一.什么是node.js Node.js 是一个让 JavaScript 运行在浏览器之外的平台. Node.j ...

  7. Java反射 - 3(动态代理)

    动态代理是对包装模式的升级,可以动态的传入需要代理的对象实现代理 准备如下 1. 被代理类的接口 2.被代理类 3.处理器:InvocationHandler 4.代理调用:Proxy.newInst ...

  8. A Bug's Life(hdu1829种类并查集)

    题意:有一群虫子,现在给你一些关系,判断这些关心有没有错 思路:向量种类并查集,下面讲一下向量的种类并查集 本题的各个集合的关心有两种0同性,1异性,怎么判断有错, 1.先判断他们是否在一个集合,即父 ...

  9. yum 安装 kvm

    KVM是什么? for Kernel-based Virtual Machine 安装环境Centos 6.5 mini x64  禁用selinux, 禁用防火墙 安装过程: 1. 查看我们的电脑是 ...

  10. 【Ecstore2.0】导出问题解决(未导出或导出文件为0字节)

    如果导出队列能成功执行(队列不执行看这里)但是并未生成文件,那么原因大部份可能是出在FTP上. ECSTORE2.0采用了PHP的FTP模块,所以先确认你的环境是否安装了FTP模块,如果没有,安装并在 ...