天天看点

说说zookeeper【陆】_zkClient客户端

上篇文章:说说zookeeper【伍】_参数与命令

本文说说zookeeper最常用的两个客户端:zkClient和Curator。

zkClient

zkClient是github上一个开源的zookeeper客户端,在zookeeper原生接口上进行了包装,更加易用,内部实现了如Session超时重连、watcher反复注册等功能。

zkClient的构造参数:

说说zookeeper【陆】_zkClient客户端

创建节点create接口API:

说说zookeeper【陆】_zkClient客户端

删除节点delete接口API

说说zookeeper【陆】_zkClient客户端

获取子节点列表

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如下:
说说zookeeper【陆】_zkClient客户端
如果客户端对nodeA节点注册的IZkChildListener监听,那么将会收到事件通知类型如下:
说说zookeeper【陆】_zkClient客户端
三点说明: 1.客户端可以对一个不存在的节点进行子节点监听; 2.当子节点列表发生变化时,服务器会通知客户端,并将最新的子节点列表发送给客户端; 3.该几点本身的创建和删除也会通知客户端; 获取节点内容readDate接口API
public <T> T readData(String path, boolean returnNullIfPathNotExists)
           
该接口的返回值已经被反序列化为指定对象。
说说zookeeper【陆】_zkClient客户端
该接口对服务端事件监听采用如下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参数
说说zookeeper【陆】_zkClient客户端
IZkDataListener事件说明
说说zookeeper【陆】_zkClient客户端
更新数据writeData接口API
public Stat writeDataReturnStat(String path, Object datat, int expectedVersion)
           
说说zookeeper【陆】_zkClient客户端
检查节点是否存在exists接口
public boolean exists(String path)
           
ZkClient和zookeeper原生API的区别 1.节点名称不用序列化; 2.可递归建立节点; 3.使用监听器实现watcher,listener不是一次性的,注册一次一直生效; 4.可逐层遍历删除非叶子节点; 5.可对不存在的节点进行子节点监听; 6.原生API的watcher只是一个监听,由服务端通知客户端,但是不会告知变化情况 下篇文章我们说说zookeeper另外一个客户端Curator的使用。

继续阅读