zoukankan      html  css  js  c++  java
  • zookeeper实例-转载加一部分个人例子

    package test;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.ZooDefs;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.Stat;
    import org.junit.Test;
    
    import java.util.ArrayList;
    
    public class ZooKeeperCURDTest {
        int version = 0;
        /**
         * 迭代获取父节点的子节点
         */
        public ArrayList<String> iterChildNodeList(String parentNodeName, ZooKeeper zooKeeper) {
            if (parentNodeName != null && !parentNodeName.equals("")) {
                try {
                    ArrayList<String> childNodeList = (ArrayList<String>) zooKeeper.getChildren(parentNodeName, null);
                    if (childNodeList.size() > 0) {
                        System.out.println("父结点:" + parentNodeName);
                        for (String childNode : childNodeList) {
                            String childNodePath = "";
                            if (!parentNodeName.equals("/")) {
                                childNodePath = parentNodeName + "/" + childNode;
                            } else {
                                childNodePath = parentNodeName + childNode;
                            }
                            System.out.println(parentNodeName + "的子节点:" + childNodePath);
                            iterChildNodeList(childNodePath, zooKeeper);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return new ArrayList<String>();
        }
    
        /**
         * 获取服务器节点列表
         */
        @Test
        public void listTest() {
            try {
                ZooKeeper zooKeeper = new ZooKeeper("192.168.44.128:2181", 10000, null);//192.168.10.201:2181
                String root = "/";
                iterChildNodeList(root, zooKeeper);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取指定节点的节点数据
         */
        @Test
        public void getDataTest() {
            try {
                ZooKeeper zooKeeper = new ZooKeeper("192.168.44.128:2181", 10000, null);
                String path = "/myZnode";
                String data = new String(zooKeeper.getData(path, null, new Stat()));
                System.out.println(data);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 节点创建测试
         */
        @Test
        public void createTest() {
            try {
                ZooKeeper zooKeeper = new ZooKeeper("192.168.44.128:2181", 10000, null);
                String path = "/my";
                String dataStr = "100";
                byte[] data = dataStr.getBytes();
                //String res;
                //CreateMode:(1)PERSISTENT:持久;(2)PERSISTENT_SEQUENTIAL:持久顺序;(3)EPHEMERAL:临时;(4)EPHEMERAL_SEQUENTIAL:临时顺序。
                if (null==zooKeeper.exists(path, false)) {
                    //不存在节点,则新建
                    zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
                }
                else{
                    //存在节点,则删除后新建
                    //zooKeeper.delete(path, zooKeeper.exists(path, null).getVersion());
                    //zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
                    //存在节点,则更新数据
                    setTest();
                    //zooKeeper.setData(path, data, version);
                }
                String newData = new String(zooKeeper.getData(path, null, new Stat()));
                if (newData != null && !newData.equals("")) {
                    System.out.println("插入节点为:" + path);
                    System.out.println("新插入数据为:" + newData);
                } else {
                    System.out.println("创建失败!");
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    
        /**
         * 节点数据更新测试
         */
        @Test
        public void setTest() {
            try {
                ZooKeeper zooKeeper = new ZooKeeper("139.129.99.12:2181", 10000, null);
                // 修改的节点
                String path = "/hh";
                // 修改的新数据
                byte[] data = new String("man").getBytes();
                // 未修改过版本号为0,修改后版本号自动递增1
                version = zooKeeper.exists(path,true).getVersion();
                System.out.println("更新前新版本号为:" + version);
                // 修改之前的节点数据
                String beforeData = new String(zooKeeper.getData(path, null, new Stat()));
                System.out.println("更新之前数据为:" + beforeData);
                //更新
                Stat stat = zooKeeper.setData(path, data, version);
                // 修改之后的版本号
                version = stat.getVersion();
                System.out.println("更新数据后新版本号为:" + version);
                // 修改之后的节点数据
                String afterData = new String(zooKeeper.getData(path, null, new Stat()));
                System.out.println("更新之后数据为:" + afterData);
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    
        /**
         * 节点删除测试
         */
        @Test
        public void deleteTest() {
            try {
                ZooKeeper zooKeeper = new ZooKeeper("192.168.44.128:2181", 10000, null);
                // 删除的节点
                String path = "/my";
                Stat stat = zooKeeper.exists(path, null);
                // 删除的节点的版本
                int version = stat.getVersion();
                // 执行删除
                zooKeeper.delete(path, version);
                //zooKeeper.delete("/my", zooKeeper.exists(path, null).getVersion());
                System.out.println("该节点已删除,当前节点如下:");
                // 删除后列出最新的zk节点结构
                listTest();
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
  • 相关阅读:
    C/C++中extern关键字详解
    C/C++中static关键字详解
    MFC创建工程图解
    C++中L和_T()之区别
    C/C++中const关键字详解
    winfrom中,父窗体中只允许显示一个子窗体的代码怎么写?
    sql 批量插入
    visual studio .net ide : checking into source control now says checkIn Now (recursive)
    1.4 Turbo C V2.0的基本操作
    关于vs2003不能调试的解决方法
  • 原文地址:https://www.cnblogs.com/honghong75042/p/13303839.html
Copyright © 2011-2022 走看看