zookeeper -- 第六章 zookeeper java client讲解 (下)

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));
    }
}

4、检查节点是否存在

1、检查节点是否存在

输入图片说明

2、zk exists判断参数是否存在

输入图片说明

猜你喜欢

转载自my.oschina.net/u/3136594/blog/1620949