zoukankan      html  css  js  c++  java
  • Zookeeper服务端的创建及简单的客户端创建节点

    服务端创建

      服务端需要安装在linux系统上,这里以CentOS7为例。

      1、进入Zookeeper官网下载Zookeeper镜像。

      官网下载链接:http://mirror.bit.edu.cn/apache/zookeeper/

      建议选择最新版

      

      选择*********bin.tar.gz

      

      下载完成后是linux系统的压缩包gz包

      

      下载后.gz文件,上传到linux服务器中的/usr/local下

       

      解压安装

      命令: tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz 

      修改名字

      命令: mv apache-zookeeper-3.5.6-bin zookeeper-3.5.6

      进入解压后文件夹

      命令:cd /usr/local/zookeeper-3.5.6

      创建 data 和 log 文件夹

      命令:  # mkdir data

           # mkdir log

      进入conf文件夹

      命令:cd /usr/local/zookeeper-3.5.6/conf

       

      修改文件名字为zoo.cfg

      命令:mv zoo_sample.cfg zoo.cfg

      编辑zoo.cfg文件

      命令:vim zoo.cfg

      修改dataDir路径为:

      dataDir=/usr/local/zookeeper-3.5.6/data

      添加dataLogDir:

      dataLogDir=/usr/local/zookeeper-3.5.6/log

      保存并退出

      在路径 /usr/local/zookeeper-3.5.6下开启服务

      命令:bin/zkServer.sh start

       

       使用命令查询状态:bin/zkServer.sh status

       

    客户端链接测试

      先下载Zookeeper可视化工具ZooInspector下面是下载链接:

      https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

      软件是压缩包形式解压后如下图

      打开build

       

      运行jar文件

        

      打开后如下图所示

      

       点击开始按钮(上图中红框内的按钮)

      输入:ip地址:端口号 比如 192.168.0.1:2181 默认端口号为2181 点击ok 首次链接等待时间较长(注意!如果首次链接ip地址输入错误,需要关闭软件重新连接)

      

      连接成功后如下图所示:wsl是作者创建的测试节点

      

    java程序链接:

      首先引入所需依赖,maven依赖(或者找到相应jar包也可以)

     <dependency>
          <groupId>org.apache.zookeeper</groupId>
          <artifactId>zookeeper</artifactId>
          <version>3.4.10</version>
        </dependency>

      创建测试类

    public class ZKDemo {
        /**
         * 连接URL
         */
        private static final String CONNECTSTRING = "localhost:2181";
        /**
         * SESSION超时时间
         */
        private static final int SESSIONTIMEOUT = 10000;
        /**
         * 计数器 构造一个用给定计数初始化的对象 参数int类型
         */
        private static CountDownLatch countDown = new CountDownLatch(1);
        /**
         * 创建ZooKeeper对象
         */
        static ZooKeeper zkClient = null;
    
        public static void init() throws Exception {
            /**
             * 参数1: 连接URL 参数2: Session超时时间 参数3: Watcher对象
             */
            zkClient = new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, new Watcher() {
    
                public void process(WatchedEvent event) {
                    KeeperState state = event.getState();
                    if (state == state.SyncConnected) {
                        System.out.println("连接成功!");
                        
                        // countDown()方法 countDown-1
                        countDown.countDown();
                    } else {
                        System.out.println("链接失败!");
                    }
                    System.out.println(event.getType() + "---" + event.getPath());
                }
    
            });
    
            System.out.println("计数开始···");
            
            // await()方法 countDown为0时继续执行
            countDown.await();
            
            System.out.println("计数结束···");
            
            /**
             * 设置权限(访问规则)
             * 参数1:指权限类型
             *              world:任何人可以访问
             *              auth:通过验证后可以访问
             *              digest:通过账户密码访问
             *              url:固定url可以访问
             * 参数2:指用户名和密码 格式:username:password
             */
            Id id = new Id("digest",DigestAuthenticationProvider.generateDigest("username:password"));
            
            /**
             * 参数1:访问范围
             *      ALL:全部
             * 参数2:访问规则
             */
            ACL a = new ACL(Perms.ALL,id);
            
            //设置访问规则集合
            List<ACL> list = new ArrayList<ACL>();
            
            list.add(a);
            
            /**
             * 创建节点 
             *      参数1:节点名
             *      参数2:节点内容,需要转为字节
             *      参数3:权限
             *              Ids.OPEN_ACL_UNSAFE:标识节点的接入权限
             *              或者选择已经创建的List<ACL> 集合 list
             *      参数4:节点类型  瞬时指close后删除
             *              PERSISTENT:持久态
             *              PERSISTENT_SEQUENTIAL:持久序列化态
             *              EPHEMERAL:瞬时态
             *              EPHEMERAL_SEQUENTIAL:序列化瞬时态
             */
            String create = zkClient.create("/wsl", "hellozk".getBytes(), list, CreateMode.PERSISTENT);
            System.out.println(create);
            /**
             * 读取节点
             * 参数1:权限方式
             * 参数2:认证规则(账号密码)
             */
            zkClient.addAuthInfo("digest", "admin:123".getBytes());
            
            /**
             * 获取数据
             * 参数1:读取的路径
             * 参数2:watcher对象
             * 参数3:Stat对象
             */
            byte[] data = zkClient.getData("/wsl", null, new Stat());
            
            System.out.println(new String(data));
            
            // 关闭
            zkClient.close();
        }
    
        public static void main(String[] args) throws Exception {
            init();
        }
    
    }
  • 相关阅读:
    Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
    Codeforces 294C 组合数学
    Educational Codeforces Round 40 (Rated for Div. 2)
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛
    天梯赛和蓝桥杯省赛训练
    莫队算法
    牛客练习赛13
    51NOD-1391 预处理dp
    AtCoder Regular Contest 092
    大二下学期赛季
  • 原文地址:https://www.cnblogs.com/wangshilei/p/12103265.html
Copyright © 2011-2022 走看看