说说zookeeper【陆】_zkClient客户端


上篇文章:说说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的使用。


猜你喜欢

转载自blog.csdn.net/xinzun/article/details/79742356