ZkClient

 

ZkClient

 


建立一个ZkClient实例

ZkClient zkClient = new ZkClient("127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002");

 


读取数据

byte[] readData(String path);
byte[] readData(String path, boolean returnNullIfPathNotExists);
byte[] readData(String path, Stat stat);

 

写入数据

Stat writeData(String path, byte[] data);
Stat writeData(String path, byte[] data, int expectedVersion);

 


建立节点

void createPersistent(String path);
void createPersistent(String path, boolean createParents);
void createPersistent(String path, byte[] data);
String createPersistentSequential(String path, byte[] data);
void createEphemeral(final String path);
void createEphemeral(final String path, final byte[] data);
String createEphemeralSequential(final String path, final byte[] data);
String create(final String path, byte[] data, final CreateMode mode);

 


删除节点

boolean delete(final String path);
boolean deleteRecursive(String path);

 


查询节点

boolean exists(final String path);
List<String> getChildren(String path);
long getCreationTime(String path);
int countChildren(String path);

 


订阅事件

zkclient的强大之处不在于基本zookeeper api操做,而在于事件监听机制,也就是zookeeper的watches。api

Zookeeper的watcher在使用上存在一次性、session过时等难点,所以zkclient对这些问题进行了封装和屏蔽。 zkclient一共定义了三种事件:session

 

org.I0Itec.zkclient..IZkStateListenerspa

public void handleStateChanged(KeeperState state) throws Exception;
public void handleNewSession() throws Exception;

 

org.I0Itec.zkclient.IZkDataListenercode

public void handleDataChange(String dataPath, byte[] data) throws Exception;
public void handleDataDeleted(String dataPath) throws Exception;

 

org.I0Itec.zkclient.IZkChildListenerblog

public void handleChildChange(String parentPath, List currentChildren) throws Exception;

 

 

  • IZkStateListener 定义了两种事件,一种是链接状态的改变,例如由未链接改变成链接上,链接上改成过时等;另外一种建立一个新的session(链接), 一般是因为session失效而后新的session被创建时触发。通常此时须要开发者从新建立临时节点(Ephemeral Nodes)。
  • IZkDataListener 也定义了两种事件,一种是节点数据的变化,另外一种是节点被删除。
  • IZkChildListener 定义了一种事件,描述子节点变化了,这时候获取到的是新的子节点列表。若是此节点被删除,那么子节点列表是null(非空列表)。

 

 

IZkClient可以很是方便的订阅这三种事件:事件

void subscribeStateChanges(IZkStateListener listener);
void subscribeDataChanges(String path, IZkDataListener listener);
List subscribeChildChanges(String path, IZkChildListener listener);

 

而zkclient最强大之处在于,当发送session失效时可以自动从新订阅这些事件,而不须要开发者从新订阅。开发

相关文章
相关标签/搜索