zoukankan      html  css  js  c++  java
  • ZooKeeper的API操作(二)(通俗易懂)

      所需要6个jar包,都是解压zookeeper的tar包后里面的。

        zookeeper-3.4.10.jar     jline-0.094.jar      log4j-1.2.16.jar 

        netty-3.10.5.jar       slf4j-api-1.6.1.jar     slf4j-log4j12-1.6.1.jar 

    1.建立连接

    /**
     * connectString     : zk服务器连接ip和端口,多个用逗号隔开
     * sessionTimeout   : 连接超时时间
     * watcher           : 监听器(当被监控的节点发生改变时,zk会通过watcher传递给我们)
    */
    #ZooKeeper zkCli = new ZooKeeper(connectString,sessionTimeout,watcher );
    ZooKeeper zkCli = new ZooKeeper("192.168.199.15:2181,192.168.199.16:2181", 2000, new Watcher() {
    @Override
    public void process(WatchedEvent event) {
         System.out.println("节点:"+event.getPath()+"发生了事件:"+event.getType());
      }
    });

      2.创建节点

    public void testCreateNode() throws Exception {
            /**
             *  path        :节点创建的路径
             *  data        :节点创建要保存的数据,是个byte类型的
             *  acl        :节点创建的权限信息(4种类型)
             *          ANYONE_ID_UNSAFE    : 表示任何人
             *          AUTH_IDS    :此ID仅可用于设置ACL。它将被客户机验证的ID替换。
             *          OPEN_ACL_UNSAFE    :这是一个完全开放的ACL(常用)
             *          CREATOR_ALL_ACL  :此ACL授予创建者身份验证ID的所有权限
             *  createMode    :创建节点的类型(4种类型)
             *          PERSISTENT:永久节点
             *            EPHEMERAL:临时节点
             *            PERSISTENT_SEQUENTIAL:永久节点、序列化
             *            EPHEMERAL_SEQUENTIAL:临时节点、序列化 
             */
        # String node = zkCli.create(path,data,acl,createMode);
            String node_PERSISTENT = zkCli.create("/zpb", "zk创建节点".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            String node_EPERSISTENT = zkCli.create("/zpb/zk", "2181".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
            System.out.println("创建的永久节点是:"+node_PERSISTENT);
            System.out.println("创建的临时节点是:"+node_EPERSISTENT);
            Thread.sleep(Long.MAX_VALUE);    //查看临时节点时,防止zkCli退出
        
    }
    另:通过连接服务器端用命令查看结果:
       

       

       备注:客户端创建永久节点时,zkCli 与服务端断开连接后,查看节点信息是存在的,反之临时节点与服务器断开连接后是不存在的

     3.获取节点数据 

    public void getNodeData() throws Exception {
            /**
             * path    : 获取数据的路径 
             * watch    : 是否开启监听
             * stat    : 查看哪个版本的数据(节点上可能会保存多个版本的数据)
             *        null: 表示获取最新版本的数据
             *        
             *
             */
            #zkCli.getData(path, watch, stat);
            byte[] data = zkCli.getData("/zpb", true, null);
            System.out.println(new String(data,"utf-8"));
            
    }

    4.修改节点数据

    public void testUpdateNodeData() throws Exception {
            /**
             * path        : 修改节点的路径
             * data        : 要修改的数据
             * version    :修改哪个版本的数据
             *           -1: 匹配所有版本
             */
           //        zkCli.setData(path, data, version)
    
         ①详见建立连接;
         ②byte[] data = zkCli.getData("/zpb", true, null);
           System.out.println("修改之前的数据是:"+new String(data,"utf-8"));
            
         ③Stat setData = zkCli.setData("/zpb", "zk修改节点".getBytes("utf-8"), -1);
            
         ④data = zkCli.getData("/zpb", true, null);
            System.out.println("修改之后的数据是:"+new String(data,"utf-8"));
            
        }
    输出的结果:
        节点:null发生了事件:None
        修改之前的数据是:zk创建节点
        节点:/zpb发生了事件:NodeDataChanged
        修改之后的数据是:zk修改节点
    执行顺序:
        在创建客户端成功后,有1个Watcher事件,然后打印输出,当zkCli获取数据时设置了监听该节点的数据true,接着输出修改之前的数据,当zkCli修改数据后, 
    负责监听的watcher事件被触发,zkCli再次获取修改后的数据,并再次设置监听

    5.删除节点

    public void testDel() throws Exception {
           
            // zkCli.delete(path, version);
            Stat exists_1 = zkCli.exists("/zpb", true);
            System.out.println(exists_1 == null ? "节点被删除了" : "节点没有被删除");
            zkCli.delete("/zpb", -1);    //-1表示匹配所有版本
            Stat exists_2 = zkCli.exists("/zpb", true);
            System.out.println(exists_2 == null ? "节点被删除了" : "节点没有被删除");
    }
  • 相关阅读:
    Dijkstra模版
    Trie树|字典树的简介及实现
    hdoj_2066一个人的旅行
    什么是java对象的强、软、弱和虚引用
    cxf调用客户端的方法
    CXF几种客户端调用性能
    csf几种调用的性能考虑
    cxf生成服务器端
    CXF在jdk1.6中运行异常解决
    CXF几种客户端调用性能
  • 原文地址:https://www.cnblogs.com/MrRightZhao/p/10463494.html
Copyright © 2011-2022 走看看