zoukankan      html  css  js  c++  java
  • 阿里云 zookeeper

    1、在阿里云上部署zookeeper 可以用xshell

    2、配置输出规则

    3、书写代码(代码为转载  转载地址 https://blog.csdn.net/weixin_38004638/article/details/96641877) 感谢原作者的分享

    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);
            }
        }
    }
  • 相关阅读:
    投行风云:FO的酸甜苦辣【转】
    周末排毒
    LeetCode | Single Number II【转】
    Adding supplementary tables and figures in LaTeX【转】
    Algorithm | Tree traversal
    Leetcode | Linked List Cycle I && II
    Network | UDP checksum
    Ubuntu下将现有的文件打包成deb包
    Base64编码加密
    requestAnimationFrame 的原理与优势
  • 原文地址:https://www.cnblogs.com/honghong75042/p/13217585.html
Copyright © 2011-2022 走看看