上篇文章:说说zookeeper【伍】_参数与命令
本文说说zookeeper最常用的两个客户端:zkClient和Curator。
zkClient
zkClient是github上一个开源的zookeeper客户端,在zookeeper原生接口上进行了包装,更加易用,内部实现了如Session超时重连、watcher反复注册等功能。
zkClient的构造参数:
创建节点create接口API:
删除节点delete接口API
获取子节点列表
public List<String> getChildren(String path)
监听子节点列表
public List<String> subscribeChildChanges(String path, IZkChildListener listener)
其中,IZkChildListener是一个监听器接口,其定义如下:
public abstract interface IZkChildListener{
public abstract void handleChildChange(String parentPath, List<String> currentChilds) throws Exception; }
其中handleChildChange用来处理服务端发送过来的事件通知,API如下:
如果客户端对nodeA节点注册的IZkChildListener监听,那么将会收到事件通知类型如下:
三点说明:
1.客户端可以对一个不存在的节点进行子节点监听;
2.当子节点列表发生变化时,服务器会通知客户端,并将最新的子节点列表发送给客户端;
3.该几点本身的创建和删除也会通知客户端;
获取节点内容readDate接口API
public <T> T readData(String path, boolean returnNullIfPathNotExists)
该接口的返回值已经被反序列化为指定对象。
该接口对服务端事件监听采用如下Listener实现:
public abstract interface IZkDataListener { public abstract void handleDataChange(String paramString, Object paramObject) throws Exception; public abstract void handleDataDeleted(String paramString) throws Exception; }
IZkDataListener API参数
IZkDataListener事件说明
更新数据writeData接口API
public Stat writeDataReturnStat(String path, Object datat, int expectedVersion)
检查节点是否存在exists接口
public boolean exists(String path)
ZkClient和zookeeper原生API的区别
1.节点名称不用序列化;
2.可递归建立节点;
3.使用监听器实现watcher,listener不是一次性的,注册一次一直生效;
4.可逐层遍历删除非叶子节点;
5.可对不存在的节点进行子节点监听;
6.原生API的watcher只是一个监听,由服务端通知客户端,但是不会告知变化情况
下篇文章我们说说zookeeper另外一个客户端Curator的使用。