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

一、獲取子節點

一、zk getChildren參數說明

輸入圖片說明

二、獲取子節點的方法

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

三、代碼測試

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


}

二、獲取節點數據

一、zk getData參數說明

輸入圖片說明

二、獲取子節點數據的方法

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

三、代碼測試

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

三、修改節點數據

一、zk setData參數說明

輸入圖片說明

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

三、代碼測試

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


}

回調類java

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

四、檢查節點是否存在

一、檢查節點是否存在

輸入圖片說明

二、zk exists判斷參數是否存在

輸入圖片說明

相關文章
相關標籤/搜索