【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)

谢谢大家观看!

聊聊、Zookeeper 客户端 ZkClient的更多相关文章

  1. ZooKeeper:第三方客户端 ZKClient

    ZKClient ZKClient的设计 ZKClient组件说明 重要的处理流程说明 启动ZKClient 为节点注册Watcher ZooKeeper的变更操作 客户端处理变更 序列化处理 ZKC ...

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

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

  3. 七:zooKeeper开源客户端ZkClient的api测试

    ZkClient是Gitthub上一个开源的ZooKeeper客户端.ZKClient在ZooKeeper原生API接口之上进行了包装,是一个更加易用的ZooKeeper客户端.同时ZKClient在 ...

  4. Zookeeper客户端使用(使用zkclient)

    Zookeeper客户端使用 二.使用zkclient 在pom.xml中加入依赖 <dependency> <groupId>com.101tec</groupId&g ...

  5. zookeeper之三 ZKClient客户端的使用

    ZKClient在原生API接口上进行了包装,同时在内部实现了诸如session超时重连.watcher反复注册等功能,使得zookeeper客户端繁琐的细节对开发人员透明.下面将从以下几个方面来使用 ...

  6. Zookeeper客户端对比选择_4

    Zookeeper客户端对比选择 本文思维导图 使用框架的好处是自带一套实用的API,但是Zookeeper虽然非常强大,但是社区却安静的可怕,版本更新较慢,下面会先从zookeeper原生API的不 ...

  7. 六、Zookeeper-开源客户端ZkClient与Curator

    ZkClient 从创建会话.创建节点.读取数据.更新数据.删除节点拉介绍ZkClient 添加依赖: pom.xml <dependency> <groupId>com.10 ...

  8. 【分布式】Zookeeper客户端

    一.前言 前篇博客分析了Zookeeper的序列化和通信协议,接着继续学习客户端,客户端是开发人员使用Zookeeper最主要的途径,很有必要弄懂客户端是如何与服务端通信的. 二.客户端 2.1 客户 ...

  9. zookeeper 客户端编程

    zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...

随机推荐

  1. Python基础-week06 面向对象编程基础

    一.面向对象编程 1.面向过程 与 面向对象编程 面向过程的程序设计: 核心是 过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式 ...

  2. 从shell(终端)中退出python

    从shell(终端)中退出python: 1.输入命令行:$ exit() 2.快捷键: ctrl+Z

  3. 理解机器为什么可以学习(四)---VC Dimension

    前面一节我们通过引入增长函数的上限的上限,一个多项式,来把Ein 和 Eout 的差Bound住,这一节引入VC Bound进一步说明这个问题. 前边我们得到,如果一个hypethesis集是有bre ...

  4. 拼多多2018校招编程题汇总 Python实现

    题目原址 列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offs ...

  5. 实战小项目之IMX6 VPU使用

    项目简介 基于官方的demo进行修改,限于能力问题,并没有将功能代码完全从官方的demo中分离出来,还是基于原来的框架进行修改,做了一些简单的封装,我做的工作如下: 使用自己的采集程序 定义6中工作模 ...

  6. [oldboy-django][2深入django]浏览器同源策略 + JSONP + cros

    浏览器的同源策略: - 同源: 同方法,同域名,同端口 http://www.baidu.com:8000 http: 方法 www.baidu.com: 域名 8000: 端口 - 定义 网上解析非 ...

  7. BZOJ4650 [NOI2016]优秀的拆分 【后缀数组】

    题目 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆 分是优秀的.例如,对于字符串 aabaabaa,如果令 A=aabA=aa ...

  8. python2.7运行出现的Warning: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

    运行出现如下错误 uncode编码警告:在unicode等价比较中,把两个参数同时转换为unicode编码失败.中断并认为他们不相等. windows下的字符串str默认编码是ascii,而pytho ...

  9. 转:java native

    今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记. native关键字说明其修饰的方法是一个原生态方法,方法对应的 ...

  10. O(∩_∩)O哈哈~

    原文发布时间为:2009-04-30 -- 来源于本人的百度文章 [由搬家工具导入]