zoukankan      html  css  js  c++  java
  • zookeeper的java客户端常用api

    一。maven导入zookeeper

      1. 在这个网址搜索zookeeper导入:https://search.maven.org/ ,pom文件可如下

    <?xml version="1.0" encoding="UTF-8"?>
    <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>hadoop_01</groupId>
        <artifactId>hadoop_01</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.13</version>
                <type>pom</type>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    
    </project>

      2. 如果zookeeper不可用在刚才的网址直接下载类包导入。

    二。增删改查

      1. 初始化

     1 public class ZkClient {
     2     private static Logger logger = Logger.getLogger(ZkClient.class);
     3     ZooKeeper zooKeeper = null;
     4 
     5     //挨个尝试连接,哪个能连接上就连接哪个
     6     private static final String connectString = "host1:2181,host2:2181,host3:2181";
     7     // 在 C:WindowsSystem32driversetc 的 hosts 文件加入 host1,host2,host3 的ip
     8     private static final int sessionTimeOut = 2000;
     9 
    10     @Before
    11     public void init() throws IOException {
    12         BasicConfigurator.configure();
    13         logger.info("123456");
    14 
    15         //参数1:连接地址,2:连接超时时间(毫秒),3:回调事件,4:是否只读
    16         zooKeeper = new ZooKeeper(connectString, sessionTimeOut, (event -> {
    17             // 事件的回调
    18             logger.info(event.getType() + "----事件回调----" + event.getPath());
    19         }),false);
    20     }
    21 
    22     /**
    23      *  增删改查
    24      * @throws KeeperException
    25      * @throws InterruptedException
    26      */
    27 
    28 }

      2. 增加节点

    1     @Test
    2     // 创建数据到zk节点中
    3     public void createNode() throws KeeperException, InterruptedException {
    4         //返回值:节点路径 参数1:节点路径 2:节点数据(可以是任何类型) 3:节点权限(OPEN_ACL_UNSAFE 开放) 4:节点类型(PERSISTENT 持久的)
    5         String createNode = zooKeeper.create("/idea", "aaaaaaaa".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    6         logger.info("返回值为:" + createNode);
    7     }

    可以看到增加的节点

    [zk: localhost:2181(CONNECTED) 0] ls /
    [zookeeper]
    [zk: localhost:2181(CONNECTED) 1] ls /
    [zookeeper, idea]
    [zk: localhost:2181(CONNECTED) 2]

      3 判断节点是否存在

    1     @Test
    2     // 判断节点是否存在
    3     public void nodeExists() throws KeeperException, InterruptedException {
    4         // Stat 为数据描述信息
    5         Stat stat = zooKeeper.exists("/idea",false);
    6         logger.info(stat==null?"节点不存在":"节点存在");
    7     }

      4. 获取子节点

     1     @Test
     2     // 获取子节点
     3     public void getNode() throws KeeperException, InterruptedException {
     4         // 参数2:监听节点变化,不写回调函数则会调用初始化时的回调函数
     5         List<String> node = zooKeeper.getChildren("/",true);
     6         for (String n:node){
     7             logger.info("节点为:" + n);
     8         }
     9         Thread.sleep(Long.MAX_VALUE);
    10     }

      5. 获取节点数据

    1     @Test
    2     // 获取节点数据
    3     public void getData() throws KeeperException, InterruptedException {
    4         byte[] data = zooKeeper.getData("/idea",false,null);
    5         logger.info("数据为:" + new String(data, StandardCharsets.UTF_8));
    6     }

      6. 删除节点

    1     @Test
    2     // 删除节点
    3     public void deleteNode() throws KeeperException, InterruptedException {
    4         // 参数2:删除数据的版本,-1为全部版本都删除
    5         zooKeeper.delete("/idea",-1);
    6     }

      7. 修改节点数据

    1     @Test
    2     // 修改节点数据
    3     public void setData(){
    4         zooKeeper.setData("/idea", "qweasd".getBytes(), -1);
    5     }

    三。更多api可在idea编辑器查看。

  • 相关阅读:
    [转帖]一些理念,一份感动,一段友谊。或许在短暂的一生中就弥足珍贵了。
    浏览器屏蔽双击选中文字
    RBAC: 基于角色的访问控制(Role-Based Access Control)
    关于ehcache配置中timeToLiveSeconds和timeToIdleSeconds的区别
    拓展jQuery的方法
    用HashSet存储不重复的对象
    spring task 实现定时执行(补充:解决定时任务执行2次问题)
    CronExpression
    java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
    jquery的原理机制
  • 原文地址:https://www.cnblogs.com/GH-123/p/9581602.html
Copyright © 2011-2022 走看看