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);
    }

    }

  • 相关阅读:
    RN 各种小问题
    迷宫问题的求解(回溯法、深度优先遍历、广度优先遍历)
    java 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)
    java四种访问权限
    八大排序之归并排序
    八大排序之堆排序
    八大排序之选择排序
    八大排序之快速排序
    Java动态代理和cglib动态代理
    类加载器 ClassLoder详解
  • 原文地址:https://www.cnblogs.com/sea520/p/13632233.html
Copyright © 2011-2022 走看看