zoukankan      html  css  js  c++  java
  • java连接ZK的基本操作

    package com;

    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.Stat;



    public class BaseZookeeper implements Watcher{

    private ZooKeeper zookeeper;
    /**
    * 超时时间
    */
    private static final int SESSION_TIME_OUT = 2000;
    private CountDownLatch countDownLatch = new CountDownLatch(1);
    @Override
    public void process(WatchedEvent event) {
    if (event.getState() == KeeperState.SyncConnected) {
    System.out.println("Watch received event");
    countDownLatch.countDown();
    }
    }




    /**连接zookeeper
    * @param host
    * @throws Exception
    */
    public void connectZookeeper(String host) throws Exception{
    zookeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
    countDownLatch.await();
    System.out.println("zookeeper connection success");
    }

    /**
    * 创建节点
    * @param path
    * @param data
    * @throws Exception
    */
    public String createNode(String path,String data) throws Exception{
    return this.zookeeper.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    /**
    * 获取路径下所有子节点
    * @param path
    * @return
    * @throws KeeperException
    * @throws InterruptedException
    */
    public List<String> getChildren(String path) throws KeeperException, InterruptedException{
    List<String> children = zookeeper.getChildren(path, false);
    return children;
    }

    /**
    * 获取节点上面的数据
    * @param path 路径
    * @return
    * @throws KeeperException
    * @throws InterruptedException
    */
    public String getData(String path) throws KeeperException, InterruptedException{
    byte[] data = zookeeper.getData(path, false, null);
    if (data == null) {
    return "";
    }
    return new String(data);
    }

    /**
    * 设置节点信息
    * @param path 路径
    * @param data 数据
    * @return
    * @throws KeeperException
    * @throws InterruptedException
    */
    public Stat setData(String path,String data) throws KeeperException, InterruptedException{
    Stat stat = zookeeper.setData(path, data.getBytes(), -1);
    return stat;
    }

    /**
    * 删除节点
    * @param path
    * @throws InterruptedException
    * @throws KeeperException
    */
    public void deleteNode(String path) throws InterruptedException, KeeperException{
    zookeeper.delete(path, -1);
    }

    /**
    * 获取创建时间
    * @param path
    * @return
    * @throws KeeperException
    * @throws InterruptedException
    */
    public String getCTime(String path) throws KeeperException, InterruptedException{
    Stat stat = zookeeper.exists(path, false);
    return String.valueOf(stat.getCtime());
    }

    /**
    * 获取某个路径下孩子的数量
    * @param path
    * @return
    * @throws KeeperException
    * @throws InterruptedException
    */
    public Integer getChildrenNum(String path) throws KeeperException, InterruptedException{
    int childenNum = zookeeper.getChildren(path, false).size();
    return childenNum;
    }
    /**
    * 关闭连接
    * @throws InterruptedException
    */
    public void closeConnection() throws InterruptedException{
    if (zookeeper != null) {
    zookeeper.close();
    }
    }

    }

    测试代码:

    public class Demo {

    public static void main(String[] args) throws Exception {
    BaseZookeeper zookeeper = new BaseZookeeper();
    zookeeper.connectZookeeper("192.168.0.1:2181");

    List<String> children = zookeeper.getChildren("/");
    System.out.println(children);
    }

    }

  • 相关阅读:
    [Linux]常用命令之【tar/zip/unzip/gzip/gunzip】
    [Git]解决: error: unable to create file src/main/webapp/xxxxxx/xxxx: Filename too long
    [Git]解决:error: The following untracked working tree files would be removed by checkout:
    [Linux]命令行分类
    [数据库/MYSQL]#解决缺陷#设置Unique索引时:"[Err] 1071
    [Java EE]辨析: POJO(PO / DTO / VO) | BO/DO | DAO
    [Java]遍历枚举类型为List
    【Vue】在Vue项目中调试Vue源码——修改Vue项目引入的vue文件
    【Vue】Vue源码解读之Component组件注册
    【Vue】驼峰命名法和短横线命名法的转换以及Vue源码中对驼峰式和大写式查找的支持
  • 原文地址:https://www.cnblogs.com/sea520/p/13632233.html
Copyright © 2011-2022 走看看