美文网首页
Zookeeper在Java中使用

Zookeeper在Java中使用

作者: 一枚智障者 | 来源:发表于2020-03-29 20:11 被阅读0次

    API方式调用Zookeeper

    1.引入Maven依赖

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

    2.连接客户端

    public class ClientTest implements Watcher {
    
        public static ZooKeeper zooKeeper = null;
    
        public static String HOST = "192.168.255.62:2181";
    
        private static CountDownLatch countDownLatch = new CountDownLatch(1);
        
        /**
         ** 客户端可以通过创建一个zk实例来连接zk服务器
        ** 注意:Zookeeper客户端和服务端会话的建立是一个异步的过程,也就是说在程序中,
        ** 构造方法会在处理完客户端初始化工作后立即返回,在大多数情况下,此时并没有真正建立好一个可用的会话,
        ** 在会话的生命周期中处于“CONNECTING”的状态。当会话真正创建完毕后Zookeeper服务端会向会话
        ** 应用的客户端发送一个事件通知,告知客户端,客户端获取到该通知之后,这样才算真正建立了会话。
         ** connectString: 连接地址:IP:端⼝
         ** sesssionTimeOut:会话超时时间:单位毫秒
         ** Wather:监听器(当特定事件触发监听时, zk会通过watcher通知到客户端)
         */
        public static void getClient() throws Exception {
            zooKeeper = new ZooKeeper(HOST, 5000, new ClientTest());
            countDownLatch.await();
        }
    
         /**
         ** 这里通过当前类实现Watcher接口,重新process方法,实现watcher监听
         */
        @Override
        public void process(WatchedEvent watchedEvent) {
            System.out.println("receive the event:"+ watchedEvent);
            countDownLatch.countDown();
        }
    }
    

    3.创建节点

        /**
         * path :节点创建的路径
         * data[] :节点创建要保存的数据,是个byte类型的
         * acl :节点创建的权限信息(4种类型)
         * ANYONE_ID_UNSAFE : 表示任何⼈
         * AUTH_IDS :此ID仅可⽤于设置ACL。它将被客户机验证的ID替换。
         * OPEN_ACL_UNSAFE :这是⼀个完全开放的ACL(常⽤) world:anyone
         * CREATOR_ALL_ACL :此ACL授予创建者身份验证ID的所有权限
         * createMode :创建节点的类型(4种类型)
         * PERSISTENT:持久节点
         * PERSISTENT_SEQUENTIAL:持久顺序节点
         * EPHEMERAL:临时节点
         * EPHEMERAL_SEQUENTIAL:临时顺序节点
         String node = zookeeper.create(path,data,acl,createMode);
         */
        public static void createNode() throws KeeperException, InterruptedException {
            String ret = zooKeeper.create("/api-create", "测试数据".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println("返回节点的路径:" + ret);
        }
    

    4. 获取节点

        /**
         * path:获取数据的路径
         * watch:是否开启监听
         * stat:表示获取当前的版本,null为最新版本的数据
         * zookeeper.getData(path,watch,stat);
         */
        public static void getNode() throws KeeperException, InterruptedException {
            byte[] data = zooKeeper.getData("/api-create", true, null);
            System.out.println("获取到当前节点的数据:" + new String(data));
        }
    

    5.更新节点

        /**
         * path:路径
         * data:要修改的内容
         * version:版本号,-1表示对最新版本的数据进行修改
         * zookeeper.setData(path, data, version);
         */
        public static void updateNode() throws Exception {
            Stat stat = zooKeeper.setData("/api-create", "update".getBytes(), -1);
        }
    

    6.删除节点

        /**
         * path:删除的节点路径
         * version:版本号
         * zookeeper.delete(path, version);
         */
        public static void deleteNode() throws Exception {
            zooKeeper.delete("/aip-create",-1);
        }
    

    相关文章

      网友评论

          本文标题:Zookeeper在Java中使用

          本文链接:https://www.haomeiwen.com/subject/jbpuuhtx.html