【ZkClient】 

ZkClient 是 GitHub 上一个开源的客户端,如果我们用 Maven 来管理工程,则引用如下。

 <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

创建连接

  • public ZkClient(String serverstring)
  • public ZkClient(String serverstring,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout)
  • public ZkClient(String serverstring,int sessionTimeout,int connectionTimeout,ZkSerializer zkSerializer)
  • public ZkClient(IZkConnection connection)
  • public ZkClient(IZkConnection connection,int connectionTimeout)
  • public ZkClient(IZkConnection connection,int connectionTimeout,ZkSerializer zkSerializer)
package zookeeper.zkclient;

import org.I0Itec.zkclient.ZkClient;

public class OpenZkClient {

	public static void main(String[] args) {

		ZkClient client = new ZkClient("127.0.0.1:2181",5000);
System.out.println(client.getChildren("/")); } }

简单来说,开源客户端相对于原 API,主要是将比较繁琐注册,删除节点不能有子节点,新增节点必须有父节点,等等一些容易出错的地方进行封装。封装以后程序员开发的时候就可以不 用考虑这些小的细节,从而提高开发效率。

还是来说说构造器参数的含义:

serverstring 可以指定单个服务器地址也可以是多个,这个和原 API 创建连接构造参数是一样的含义。

connectionTimeout,sessionTimeout 是连接超时时间和会话超时时间。单位都是毫秒,其中会话默认是 30000 毫秒,也就是 30 秒。

connection 是 IZkConnection 的接口实现类。

zkSerializer 自定义的序列化器,关于序列化和反序列化是一个很大的话题,有 Java 自带的序列化工具,也有很多开源的序列化工具,以后会写一章序列化。

创建节点

  • String create(final String path,Object data,final CreateMode mode)
  • String create(final String path,Object data,final List<ACL> acl,final CreateMode mode)
  • void create(final String path,Object data,final CreateMode mode,final AsyncCallback.StringCallback callback,final Object data)
  • void createEphemeral(final String path)
  • void createEphemeral(final String path,final Object data)
  • void createPersistent(String path)
  • void createPersistent(String path,boolean createParents)
  • void createPersistent(String path,Object data)
  • void createPersistent(String path,List<ACL> acl,Object data)
  • void createPersistentSequential(String path,Object data)
  • void createEphemeralSequential(final String path,final Object data)

创建节点和原生 API 相比,原生只能传 byte 数组,这里可以传 Object。而且父节点不存在可以指定是否创建。

 删除节点

  • boolean delete(final String path)
  • delete(final String path,final AsyncCallback.VoidCallback callback,final Object context)
  • boolean deleteRecursive(String path)

说一下 deleteRecursive,原生 API 删除节点如果有子节点则必须把子节点都删掉才可以,这里的函数则不需要,它会自动删除所有的子节点。

读取数据

 (一)、getChildren

  • List<String> getChildren(String path)

(二)、getData

  • <T extends Object> T readData(String path)
  • <T extends Object> T readData(String path,boolean returnNullIfPathNotExists)
  • <T extends Object> T readData(String path,Stat stat)

这里说一下 returnNullIfPathNotExists,原生 API 读取数据,如果 path 不存在就会报错,这里设置 returnNullIfPathNotExists 为 true 则不会报错,会返回 null。

更新数据

  • void writeData(String path,Object data)
  • void writeData(final String path,Object data,final int expectedVersion)

检测节点是否存在

  •  boolean exists(final String path)

谢谢大家观看!

最新文章

  1. oracle rac安装
  2. js基础知识:变量
  3. java基础之集合框架
  4. Apache Commons CLI命令行启动
  5. android 入门 005(登录记住)
  6. 问题记录-Fragment导包不同导致无法自动转型
  7. JS 时间格式CST转GMT
  8. codeforces 628F. Bear and Fair Set 网络流
  9. iOS开发——GCDAsyncSocket
  10. Linux系统安全需要注意的一些问题
  11. linux 定时任务详解 按秒设定
  12. J2EE学习从菜鸟变大鸟之七 Servlet
  13. Shell 脚本中调用另一个 Shell 脚本的三种方式
  14. temp-重庆银行
  15. java笔试之输出
  16. tinymce-vue富文本编辑器(翻译)
  17. 【ARC063E】Integers on a tree
  18. 怎样从Javaproject师成长为架构师?
  19. appium运行时每次默认弹出appiumsetting与unlock重装,关闭这两个步骤的方法
  20. java字符串常量池——字符串==比较的一个误区

热门文章

  1. 关于html头部引用(meta,link)
  2. 68、TSPL指令集(标签打印机)
  3. uReplicator实现分析
  4. Python-S9-Day123——爬虫两示例
  5. Halcon11 Windows版 下载
  6. LeetCode with Python -&gt; Dynamic Programming
  7. thinkphp框架中使用递归实现无限级分类
  8. javascript new关键字做了什么
  9. 【CCF】 Markdown 模拟
  10. php处理ajax