1、获取子节点
1、zk getChildren参数说明
2、获取子节点的方法
public List<String> getChildrenNode(String path, boolean watcher)
throws KeeperException, InterruptedException {
// 返回path节点的子节点列表
return zk.getChildren(path,watcher);
}
public List<String> getChildrenNode(String path, Watcher watcher)
throws KeeperException, InterruptedException {
return zk.getChildren(path,watcher);
}
public List<String> getChildrenNode(String path,boolean watcher, Stat stat)
throws KeeperException, InterruptedException {
// 返回stat和子节点
return zk.getChildren(path,watcher,stat);
}
public List<String> getChildrenNode(String path, Watcher watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getChildren(path,watcher,stat);
}
public void getChildrenNode(String path, boolean watch, AsyncCallback.ChildrenCallback cb,
Object ctx){
//以异步的方式返回子节点,不返回path节点的状态信息"stat"
zk.getChildren(path,watch,cb,ctx);
}
public void getChildrenNode(String path, Watcher watch,AsyncCallback.ChildrenCallback cb, Object ctx){
zk.getChildren(path,watch,cb,ctx);
}
public void getChildrenNode(String path, boolean watcher, AsyncCallback.Children2Callback cb, Object ctx)
throws KeeperException, InterruptedException {
// 以异步的方式返回子节点,返回path指定节点的状态信息"stat"
zk.getChildren(path,watcher,cb,ctx);
}
public void getChildrenNode(String path, Watcher watcher, AsyncCallback.Children2Callback cb, Object ctx)
throws KeeperException, InterruptedException {
zk.getChildren(path,watcher,cb,ctx);
}
3、代码测试
package com.demo;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class ZK_GetChildren_Sync implements Watcher{
private static ZooKeeper zk = null;
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
System.out.println("event.getType() " + event.getType());
if(event.getType()== Event.EventType.NodeChildrenChanged){
List<String> childrenList = null;
try {
childrenList = zk.getChildren(event.getPath(), true);
System.out.println("添加节点后="+childrenList.toString());
connectedSemaphore.countDown();
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException, KeeperException, IOException {
String path = "/javaclient";
ZK_GetChildren_Sync zks = new ZK_GetChildren_Sync();
zk = new ZooKeeper("localhost:2181",5000,zks);
List<String> childrenList = zks.getChildrenNode(path, true);// false: 不使用默认的watcher
System.out.println(childrenList.toString());
connectedSemaphore.await();
}
public List<String> getChildrenNode(String path, boolean watcher)
throws KeeperException, InterruptedException {
// 返回path节点的子节点列表
return zk.getChildren(path,watcher);
}
public List<String> getChildrenNode(String path, Watcher watcher)
throws KeeperException, InterruptedException {
return zk.getChildren(path,watcher);
}
public List<String> getChildrenNode(String path,boolean watcher, Stat stat)
throws KeeperException, InterruptedException {
// 返回stat和子节点
return zk.getChildren(path,watcher,stat);
}
public List<String> getChildrenNode(String path, Watcher watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getChildren(path,watcher,stat);
}
public void getChildrenNode(String path, boolean watch, AsyncCallback.ChildrenCallback cb,
Object ctx){
//以异步的方式返回子节点,不返回path节点的状态信息"stat"
zk.getChildren(path,watch,cb,ctx);
}
public void getChildrenNode(String path, Watcher watch,AsyncCallback.ChildrenCallback cb, Object ctx){
zk.getChildren(path,watch,cb,ctx);
}
public void getChildrenNode(String path, boolean watcher, AsyncCallback.Children2Callback cb, Object ctx)
throws KeeperException, InterruptedException {
// 以异步的方式返回子节点,返回path指定节点的状态信息"stat"
zk.getChildren(path,watcher,cb,ctx);
}
public void getChildrenNode(String path, Watcher watcher, AsyncCallback.Children2Callback cb, Object ctx)
throws KeeperException, InterruptedException {
zk.getChildren(path,watcher,cb,ctx);
}
public ZooKeeper getZk() {
return zk;
}
public void setZk(ZooKeeper zk) {
this.zk = zk;
}
}
2、获取节点数据
1、zk getData参数说明
2、获取子节点数据的方法
public byte[] getNodeData(String path, boolean watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getData(path,watcher,stat);
}
public byte[] getNodeData(String path, Watcher watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getData(path,watcher,stat);
}
public void getNodeData(String path, boolean watch, AsyncCallback.DataCallback cb, Object ctx) {
zk.getData(path,watch,cb,ctx);
}
public void getNodeData(String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx) {
zk.getData(path,watcher,cb,ctx);
}
3、代码测试
package com.demo;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
public class ZK_GetData_Sync implements Watcher {
private static ZooKeeper zk = null;
private static Stat stat = new Stat();
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
@Override
public void process(WatchedEvent event) {
// 数据节点的数据内容发生变更
if(event.getType()== Event.EventType.NodeDataChanged){
try {
byte data[] = zk.getData(event.getPath(), true, stat);
System.out.println("修改节点后= " + new String(data));
System.out.println("修改节点后 dataversion= " + stat.getVersion());
connectedSemaphore.countDown();
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
String path = "/javaclient/node1";
zk = new ZooKeeper("127.0.0.1:2181",5000,new ZK_GetData_Sync());
byte data[] = zk.getData(path,true, stat);
System.out.println("before= " + new String(data));
System.out.println("before dataversion=" + stat.getVersion());
connectedSemaphore.await();
}
public byte[] getNodeData(String path, boolean watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getData(path,watcher,stat);
}
public byte[] getNodeData(String path, Watcher watcher, Stat stat)
throws KeeperException, InterruptedException {
return zk.getData(path,watcher,stat);
}
public void getNodeData(String path, boolean watch, AsyncCallback.DataCallback cb, Object ctx) {
zk.getData(path,watch,cb,ctx);
}
public void getNodeData(String path, Watcher watcher, AsyncCallback.DataCallback cb, Object ctx) {
zk.getData(path,watcher,cb,ctx);
}
public static ZooKeeper getZk() {
return zk;
}
public static void setZk(ZooKeeper zk) {
ZK_GetData_Sync.zk = zk;
}
}
3、修改节点数据
1、zk setData参数说明
2、zk setData修改数据方法
public Stat setNodeData(final String path, byte data[], int version)
throws KeeperException, InterruptedException {
return zk.setData(path,data,version);
}
public void setNodeData(final String path, byte data[], int version,
AsyncCallback.StatCallback cb, Object ctx) {
zk.setData(path,data,version,cb,ctx);
}
3、代码测试
package com.demo;
import com.alibaba.fastjson.JSON;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
public class ZK_SetData_Sync{
private static ZooKeeper zk = null;
private static Stat stat = new Stat();
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
String path = "/javaclient/node2";
byte[] dataBytes = "hello11".getBytes();
String context = "上下文内容";
ZK_SetData_Sync zk_setData_sync = new ZK_SetData_Sync();
// 创建连接
zk = new ZooKeeper("127.0.0.1:2181",5000,new ZK_GetData_Sync());
// 同步修改数据
// Stat stat = zk_setData_sync.setNodeData(path,dataBytes,2);
// System.out.println(JSON.toJSONString(stat));
// 异步修改数据
// zk_setData_sync.setNodeData(path,dataBytes,2,new SetDataAsyncCallback(),context);
// Thread.sleep(3*1000);
}
public Stat setNodeData(final String path, byte data[], int version)
throws KeeperException, InterruptedException {
return zk.setData(path,data,version);
}
public void setNodeData(final String path, byte data[], int version,
AsyncCallback.StatCallback cb, Object ctx) {
zk.setData(path,data,version,cb,ctx);
}
public static ZooKeeper getZk() {
return zk;
}
public static void setZk(ZooKeeper zk) {
ZK_SetData_Sync.zk = zk;
}
}
回调类
package com.demo;
import com.alibaba.fastjson.JSON;
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.data.Stat;
public class SetDataAsyncCallback implements AsyncCallback.StatCallback{
@Override
public void processResult(int rc, String path, Object ctx, Stat stat) {
System.out.println("执行回调方法");
System.out.println("rc: "+rc);
System.out.println("path: "+path);
System.out.println("ctx "+ ctx);
System.out.println("stat "+ JSON.toJSONString(stat));
}
}