Zookeeper eclipse plugin

eclipse 当做client连接zookeerper

 

“help” =>"Install new software..."

zookeeper-plugin - http://www.massedynamic.org/eclipse/updates/

安装好后 

“Window”=> "Show View" =>"Zookeeper 3.2.2 Explorer"

填入主机和端口号连接即可连上zookeeper

需要导入的jar包:

zookeeper-3.4.13.jar

zookeeper-3.4.13/lib/*.jar

package com.hust;

import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooKeeper.States;
import org.apache.zookeeper.data.Stat;

public class ZkClient {

    public static void main(String[] args) {
        testBase1();
        testBase2();
        testBase3();
        testWatcher();

    }

    private static void testWatcher() {
        System.out.println("----- testWatcher()------");
        String path = "/testWatcher";
        try {
            ZooKeeper zk = new ZooKeeper("10.121.63.240:2181", 5000, null);
            String temp = zk.create(path, "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            zk.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void testBase1() {
        System.out.println("----- testBase1()------");
        String path = "/temp";
        try {
            ZooKeeper zk = new ZooKeeper("10.121.63.240:2181", 5000, null);
            String temp = zk.create(path, "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            zk.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void testBase2() {
        System.out.println("----- testBase2()------");
        final String path = "/caoming";
        try {
            CountDownLatch sampleLatch = new CountDownLatch(1);
            Watcher sampleWatcher = new ConnectedWatcher(sampleLatch);
            ZooKeeper zk = new ZooKeeper("10.121.63.208:2181", 5000, sampleWatcher);
            // 只有当ZK链接成功(状态为 SyncConnected)时,此函数调用才结束
            waitUntilConnected(zk, sampleLatch);
            // 接下来就可以继续ZK访问了,避免因为ZK未连接成功时的访问出错
            System.out.println("1111111");
            Stat stat = zk.exists(path, null);
            System.out.println("2222");
            if (null == stat) {
                System.out.println("节点不存在");
            } else {
                System.out.println("节点存在");
                byte[] data = zk.getData(path, false, null);
                System.out.println("节点内容:" + new String(data));
                zk.delete(path, -1);// 第二个参数代表节点版本 -1代表当前版本自己去获得版本
            }

            String temp = zk.create(path, "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            // 返回当前节点的详细信息
            Stat data = zk.setData(path, "123456".getBytes(), -1);
            System.out.println("data:" + data);
            zk.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void testBase3() {
        System.out.println("----- testBase3()------");
        String path = "/temp";
        try {
            ZooKeeper zk = new ZooKeeper("10.121.63.240:2181", 5000, null);
            Stat stat = zk.exists(path, null);
            if (null != stat) {
                System.out.println(path + " exists.");
                rmrPath(zk, path);
            }

            String temp = zk.create(path, "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            temp = zk.create(path + "/a", "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            temp = zk.create(path + "/b", "caoming-data".getBytes(), Ids.OPEN_ACL_UNSAFE,
                    CreateMode.PERSISTENT);
            System.out.println(temp);
            
            
            

            zk.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void waitUntilConnected(ZooKeeper testZooKeeper, CountDownLatch testLatch) {
        if (testZooKeeper.getState() == States.CONNECTING) {
            try {
                testLatch.await();
            } catch (InterruptedException err) {
                System.out.println("Latch exception");
            }
        }
    }

    static class ConnectedWatcher implements Watcher {
        private CountDownLatch connectedLatch;

        ConnectedWatcher(CountDownLatch connectedLatch) {
            // CountDownLatch实例初始化时设为1即可
            this.connectedLatch = connectedLatch;
        }

        @Override
        public void process(WatchedEvent event) {
            if (event.getState() == KeeperState.SyncConnected) {
                connectedLatch.countDown();/* ZK连接成功时,计数器由1减为0 */
            }
        }
    }
    
    public static void rmrPath(ZooKeeper zk, String path) throws Exception {
        delPath(zk, path);
        zk.delete(path, -1);
    }

    public static void delPath(ZooKeeper zk, String path) throws Exception {
        List<String> paths = zk.getChildren(path, false);
        System.out.println(paths.toString());
        for (String p : paths) {
            delPath(zk, path + "/" + p);  
            System.out.println(path + "/" + p);
        }

        for (String p : paths) {
            zk.delete(path + "/" + p, -1);
        }
    }
}

 

posted @ 2019-03-14 16:34  牧 天  阅读(381)  评论(0)    收藏  举报