版权声明:尊重原创 https://blog.csdn.net/qq_41256709/article/details/88116805
操作zookeeper原生API过于繁琐。
原生API:
不能递归创建:如若不存在“/local”,那么在直接创建"/local/tmp"则会报错。
不能递归删除:如若存在“/local/tmp”,那么在做删除"/local"时就会报错。
watch的监听是一次性的,只能手动将其设置为true才可以。
在使用ZKClient在创建节点的时候,如若是递归创建,则不能为节点赋值。
非递归创建:
zkc.createPersistent("/super");
Thread.sleep(1000);
zkc.createPersistent("/super" + "/" + "c1", "c1内容");
Thread.sleep(1000);
zkc.createPersistent("/super" + "/" + "c2", "c2内容");
Thread.sleep(1000);
递归创建
zkc.createPersistent("/super/c1", true); //true表示创建父节点
ZKClient实现watch
ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), 5000);
//对父节点添加监听子节点变化。
zkc.subscribeChildChanges("/super", new IZkChildListener() {
//创建、删除
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println("parentPath: " + parentPath);
System.out.println("currentChilds: " + currentChilds);
}
});
zkc.subscribeDataChanges("/super", new IZkDataListener() {
@Override
public void handleDataDeleted(String path) throws Exception {
System.out.println("删除的节点为:" + path);
}
@Override
public void handleDataChange(String path, Object data) throws Exception {
System.out.println("变更的节点为:" + path + ", 变更内容为:" + data);
}
});