zkClient简介及API使用
一、简介
上一节提到,在使用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使用相关推荐
- Sentinel 简介与API订阅发布
Sentinel 简介 Redis 的 Sentinel 系统用于管理多个 redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断 ...
- inquirerjs 简介及API详解
inquirerjs 是什么 Inquirerjs 是一个用来实现命令行交互式界面的工具集合.它帮助我们实现与用户的交互式交流,比如给用户提一个问题,用户给我们一个答案,我们根据用户的答案来做一些事情 ...
- k-近邻算法简介及api的初步使用
Python学习系列文章:
- Zookeeper基本使用
Zookeeper基本使用 1.Zookeeper系统模型 2.Zookeeper命令行操作 3.Zookeeper原生api使用 4.Zookeeper开源客户端 1.Zookeeper系统模型 Z ...
- ZABBIX API简介及使用
API简介 Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时.很难想象管理数千台服务器而没有自动化是多么的困难.Zabbix API为批量操作.第三方软件集成以 ...
- [转载]JavaMail API简介
JavaMail API简介 JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理 (Mail User Agent ,MUA) 类型的 ...
- USB OTG to PC USB API简介
USB OTG to PC USB API简介 本API分为四部分:Linux或Android内核 (主要是gadget驱动).linux端API及其DEMO.Windows 驱动.Windows A ...
- Zookeeper实战之客户端Curator vs zkClient
1. zookeeper应用开发 Zookeeper应用开发,需要使用Zookeeper的java 客户端API ,去连接和操作Zookeeper 集群. 可以供选择的java 客户端API 有:Zo ...
- apkplug插件托管服务简化与简介-05
2019独角兽企业重金招聘Python工程师标准>>> 本文基于TuoClondService1.1.0讲解 apkplug插件托管服务是提供给开发者一个远程发布插件的管理平台,但v ...
最新文章
- android 的中文意思
- 趣味图形之 余弦函数cos与直线相交(另一种相交)
- OSChina 周六乱弹 —— 小明和网关超经典的故事~
- 微服务网关从零搭建——(三)Ocelot网关 + identity4
- MavenSelenium测试自动化教程
- python下载文件到本地-python从下载链接下载文件到本地
- sama5d3 xplained 系统加载后确认使用的网口
- oracle 内置函数(三)日期函数
- Flink从入门到精通100篇(十)-双亲委派模型与 Flink 的类加载策略
- 【script】python中的函数式编程
- 微信小程序图片上传并展示
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据...
- NOD32病毒库自动更新代码
- 嵌入式软件开发是做什么的?要学哪些课程?
- Oracle数据库服务重启方法
- Unity3d 利用 AvproVideo 播放带透明通道mov视频在部分电脑无法播放的解决方案
- VR全景图在家装行业的应用及发展
- 计算机的本质到底是什么?
- python中多重if语句用法_python-循环语句的简单条件语句、多重条件语句和嵌套条件语句编写...
- html 定义列表dddt,一个微服务+DDD(领域驱动设计)的代码结构示例