zoukankan      html  css  js  c++  java
  • Zookeeper入门(七)之Java连接Zookeeper

    Java操作Zookeeper很简单,但是前提要把包导对。

    关于Zookeeper的Linux环境搭建可以参考我的这篇博客:Linux环境下Zookeeper安装

    下面进入正题:

    一、导入依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>cn.zookeeper</groupId>
      <artifactId>zookeeper_demo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
    <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    
    <dependencies>
        <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
    </dependency>
    </dependencies>
    </project>

    二、编写工具类代码和测试代码

    package zookeeper_demo;
    
    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);
       
       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 static void main(String[] args) throws Exception {
           BaseZookeeper zookeeper = new BaseZookeeper();
           zookeeper.connectZookeeper("192.168.126.128:2181");
           List<String> children = zookeeper.getChildren("/");
           System.out.println(children);
       }
    }
    
     
    
     
    
     

    完成以上两步,即可完成Java连接并对Zookeeper的简单操作。

  • 相关阅读:
    bzoj3505 数三角形 组合计数
    cogs2057 殉国 扩展欧几里得
    cogs333 荒岛野人 扩展欧几里得
    bzoj1123 BLO tarjan求点双连通分量
    poj3352 road construction tarjan求双连通分量
    cogs1804 联合权值 dp
    cogs2478 简单的最近公共祖先 树形dp
    cogs1493 递推关系 矩阵
    cogs2557 天天爱跑步 LCA
    hdu4738 Caocao's Bridge Tarjan求割边
  • 原文地址:https://www.cnblogs.com/youcong/p/9676198.html
Copyright © 2011-2022 走看看