一、简介
上一节提到,在使用ZooKeeper的原生API时,经常需要处理几个问题:重复注册watcher、session失效重连、异常处理(删除节点不能有子节点,新增节点必须有父节点等),这使得实际使用中比较繁琐。zkclient是Github上一个开源的Zookeeper客户端,在Zookeeper原生 API接口之上进行了包装,是一个更加易用的Zookeeper客户端。同时Zkclient在内部实现了诸如Session超时重连,Watcher反复注册等功能,程序员开发的时候就可以不 用考虑这些小的细节,从而提高开发效率。

二、zkClient的基本操作

在使用zkClient操作Zookeeper时,基本的操作都封装在ZkClient类中,使用时直接创建ZkClient对象,调用其相应的方法即可。

1)创建连接

直接在ZkClient的构造函数中指定连接参数,完成对象创建后连接也就已经创建好。在ZkClient中提供了以下几个构造函数:

  • public ZkClient(String serverstring)
  • public ZkClient(String zkServers, int connectionTimeout)
  • public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout)
  • ZkClient(String zkServers, int sessionTimeout, int connectionTimeout, ZkSerializer zkSerializer)
  • ppublic ZkClient(final String zkServers, final int sessionTimeout, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)
  • public ZkClient(IZkConnection connection)
  • public ZkClient(IZkConnection connection, int connectionTimeout)
  • public ZkClient(IZkConnection zkConnection, int connectionTimeout, ZkSerializer zkSerializer)
  • public ZkClient(final IZkConnection zkConnection, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)

构造器参数的含义如下:

  • serverstring 可以指定单个服务器地址也可以是多个,这个和原 API 创建连接构造参数是一样的含义。
  • connectionTimeout,sessionTimeout 是连接超时时间和会话超时时间。单位都是毫秒,其中会话默认是 30000 毫秒,也就是 30 秒。
  • connection 是 IZkConnection 的接口实现类。
  • zkSerializer 自定义的序列化器。
  • operationRetryTimeout 是在与服务连接断开后,进行重试操作的最长时间。也就是说,如果断开时间未超过operationRetryTimeout,则所有操作进行重试。operationRetryTimeout单位也是毫秒,如果传入小于0的值,则一直进行操作重试,直至与服务的连接恢复。

2)创建节点

  • 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。而且父节点不存在可以指定是否创建。

3)删除节点

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

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

4)读取数据

 (一)、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。

5)更新数据

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

6)检测节点是否存在

  •  boolean exists(final String path)

三、zkClient的事件监听机制

在原生Zk API中,提供了watcher的机制监听节点,而zkClient将之转换成Listener的概念,就是订阅服务端的事件,从而我们只要实现IZkChildListener 接口相应的方法就能够对事件进行处理。

订阅/取消订阅节点子变化事件

  • public List<String> subscribeChildChanges(String path, IZkChildListener listener)
  • public void unsubscribeChildChanges(String path, IZkChildListener childListener)

订阅/取消订阅数据变化事件

  • public void subscribeDataChanges(String path, IZkDataListener listener)
  • public void unsubscribeDataChanges(String path, IZkDataListener dataListener)

订阅/取消订阅连接状态变化事件

  • public void subscribeStateChanges(final IZkStateListener listener)
  • public void unsubscribeStateChanges(IZkStateListener stateListener)

取消所有订阅事件

  • public void unsubscribeAll()

此外,zkClient还对权限控制等进行了封装,关于Zookeeper的权限控制,我们明天再进行学习。更详细的API可以直接阅读ZkClient类的源码:https://github.com/sgroschupf/zkclient/blob/master/src/main/java/org/I0Itec/zkclient/ZkClient.java

参考:

Zookeeper 客户端 ZkClient https://www.cnblogs.com/xums/p/7220449.html

zookeeper学习之zkclient事件监听 https://my.oschina.net/u/2277632/blog/1532162

zkClient简介及API使用相关推荐

  1. Sentinel 简介与API订阅发布

    Sentinel 简介 Redis 的 Sentinel 系统用于管理多个 redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断 ...

  2. inquirerjs 简介及API详解

    inquirerjs 是什么 Inquirerjs 是一个用来实现命令行交互式界面的工具集合.它帮助我们实现与用户的交互式交流,比如给用户提一个问题,用户给我们一个答案,我们根据用户的答案来做一些事情 ...

  3. k-近邻算法简介及api的初步使用

    Python学习系列文章:

  4. Zookeeper基本使用

    Zookeeper基本使用 1.Zookeeper系统模型 2.Zookeeper命令行操作 3.Zookeeper原生api使用 4.Zookeeper开源客户端 1.Zookeeper系统模型 Z ...

  5. ZABBIX API简介及使用

    API简介 Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时.很难想象管理数千台服务器而没有自动化是多么的困难.Zabbix API为批量操作.第三方软件集成以 ...

  6. [转载]JavaMail API简介

    JavaMail API简介 JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理 (Mail User Agent ,MUA) 类型的 ...

  7. USB OTG to PC USB API简介

    USB OTG to PC USB API简介 本API分为四部分:Linux或Android内核 (主要是gadget驱动).linux端API及其DEMO.Windows 驱动.Windows A ...

  8. Zookeeper实战之客户端Curator vs zkClient

    1. zookeeper应用开发 Zookeeper应用开发,需要使用Zookeeper的java 客户端API ,去连接和操作Zookeeper 集群. 可以供选择的java 客户端API 有:Zo ...

  9. apkplug插件托管服务简化与简介-05

    2019独角兽企业重金招聘Python工程师标准>>> 本文基于TuoClondService1.1.0讲解 apkplug插件托管服务是提供给开发者一个远程发布插件的管理平台,但v ...

最新文章

  1. android 的中文意思
  2. 趣味图形之 余弦函数cos与直线相交(另一种相交)
  3. OSChina 周六乱弹 —— 小明和网关超经典的故事~
  4. 微服务网关从零搭建——(三)Ocelot网关 + identity4
  5. MavenSelenium测试自动化教程
  6. python下载文件到本地-python从下载链接下载文件到本地
  7. sama5d3 xplained 系统加载后确认使用的网口
  8. oracle 内置函数(三)日期函数
  9. Flink从入门到精通100篇(十)-双亲委派模型与 Flink 的类加载策略
  10. 【script】python中的函数式编程
  11. 微信小程序图片上传并展示
  12. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据...
  13. NOD32病毒库自动更新代码
  14. 嵌入式软件开发是做什么的?要学哪些课程?
  15. Oracle数据库服务重启方法
  16. Unity3d 利用 AvproVideo 播放带透明通道mov视频在部分电脑无法播放的解决方案
  17. VR全景图在家装行业的应用及发展
  18. 计算机的本质到底是什么?
  19. python中多重if语句用法_python-循环语句的简单条件语句、多重条件语句和嵌套条件语句编写...
  20. html 定义列表dddt,一个微服务+DDD(领域驱动设计)的代码结构示例

热门文章

  1. Ubuntu下 生成系统签名以及给APK直接签名
  2. uniapp项目 vue create -p dcloudio/uni-preset-vue my-project下载失败
  3. 王道论坛计算机系统01——操作系统的定义和特征
  4. 斌斌语法课第二讲笔记
  5. python画词云图、词云图模糊不清
  6. 紫光输入法导致系统故障
  7. win10语言栏不见了_ME 2020软件下载和安装教程|兼容WIN10
  8. [附源码]Python计算机毕业设计道路桥梁工程知识文库系统Django(程序+LW)
  9. 计算机考证等级有用吗
  10. 各种型号西门子PLC所支持的通信协议小结