引入maven包

<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
<version>0.9</version>
</dependency>
<dependency>
<artifactId>zookeeper</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
<groupId>org.apache.zookeeper</groupId>
<version>3.4.10</version>
</dependency>

创建连接

Zookeeper(String connectionString, int sessionTimeout, watcher watcher)
  • connectionString - zookeeper主机

  • sessionTimeout- 会话超时

  • watcher - 实现"监听器" 对象。zookeeper集合通过监视器对象返回连接状态

public static void main(String[] args) throws IOException, InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1); ZooKeeper zookeeper = new ZooKeeper("192.168.133.133:2181", 5000, (WatchedEvent x) -> {
if (x.getState() == Watcher.Event.KeeperState.SyncConnected) {
System.out.println("连接成功");
countDownLatch.countDown();
}
});
countDownLatch.await();
System.out.println(zookeeper.getSessionId());
zookeeper.close();
}
新增节点
// 同步
create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
// 异步
create(String path, byte[] data, List<ACL> acl, CreateMode createMode,
AsynCallback.StringCallback callBack, Object ctx)
  • 参数 解释
    path znode路径
    data 数据
    acl 要创建的节点的访问控制列表。zookeeper API提供了一个静态接口 ZooDefs.Ids 来获取一些基本的acl列表。例如,ZooDefs.Ids.OPEN_ACL_UNSAFE返回打开znodeacl列表
    createMode 节点的类型,这是一个枚举
    callBack 异步回调接口
    ctx 传递上下文参数

示例:

// 枚举的方式
public static void createTest1() throws Exception{
String str = "node";
String s = zookeeper.create("/node", str.getBytes(),
ZooDefs.Ids.READ_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(s);
}

  

修改节点

同样也有两种修改方式(异步和同步)

  • // 同步
    setData(String path, byte[] data, int version)
    // 异步
    setData(String path, byte[] data, int version, StatCallback callBack, Object ctx)
  • 参数 解释
    path 节点路径
    data 数据
    version 数据的版本号, -1代表不使用版本号,乐观锁机制
    callBack 异步回调 AsyncCallback.StatCallback,和之前的回调方法参数不同,这个可以获取节点状态
    ctx 传递上下文参数
  •     public static void setData1() throws Exception{
      // arg1:节点的路径
           // arg2:修改的数据
           // arg3:数据的版本号 -1 代表版本号不参与更新
           Stat stat = zookeeper.setData("/hadoop","hadoop-1".getBytes(),-1);
      }
  •     public static void setData2() throws Exception{
           zookeeper.setData("/hadoop", "hadoop-1".getBytes(), 3 ,new AsyncCallback.StatCallback(){
               @Override
               public void processResult(int rc, String path, Object ctx, Stat stat) {
                   // 讲道理,要判空
                   System.out.println(rc + " " + path + " " + stat.getVersion() +  " " + ctx);
              }
          }, "I am context");
      }
删除节点

异步、同步

  • // 同步
    delete(String path, int version)
    // 异步
    delete(String path, int version, AsyncCallback.VoidCallback callBack, Object ctx)
  • 参数 解释
    path 节点路径
    version 版本
    callBack 数据的版本号, -1代表不使用版本号,乐观锁机制
    ctx 传递上下文参数
  •     public static void deleteData1() throws Exception {
           zookeeper.delete("/hadoop", 1);
      }

       public static void deleteData2() throws Exception {
           zookeeper.delete("/hadoop", 1, new AsyncCallback.VoidCallback() {
               @Override
               public void processResult(int rc, String path, Object ctx) {
                   System.out.println(rc + " " + path + " " + ctx);
              }
          }, "I am context");
           TimeUnit.SECONDS.sleep(1);
      }
查看节点

同步、异步

  • // 同步
    getData(String path, boolean watch, Stat stat)
    getData(String path, Watcher watcher, Stat stat)
    // 异步
    getData(String path, boolean watch, DataCallback callBack, Object ctx)
    getData(String path, Watcher watcher, DataCallback callBack, Object ctx)
  • 参数 解释
    path 节点路径
    boolean 是否使用连接对象中注册的监听器
    stat 元数据
    callBack 异步回调接口,可以获得状态和数据
    ctx 传递上下文参数
  •     public static void getData1() throws Exception {
           Stat stat = new Stat();
           byte[] data = zookeeper.getData("/hadoop", false, stat);
           System.out.println(new String(data));
           // 判空
           System.out.println(stat.getCtime());
      }

       public static void getData2() throws Exception {
           zookeeper.getData("/hadoop", false, new AsyncCallback.DataCallback() {
               @Override
               public void processResult(int rc, String path, Object ctx, byte[] bytes, Stat stat) {
                   // 判空
                   System.out.println(rc + " " + path
                                      + " " + ctx + " " + new String(bytes) + " " +
                                      stat.getCzxid());
              }
          }, "I am context");
           TimeUnit.SECONDS.sleep(3);
      }
查看子节点

同步、异步

  • // 同步
    getChildren(String path, boolean watch)
    getChildren(String path, Watcher watcher)
    getChildren(String path, boolean watch, Stat stat)    
    getChildren(String path, Watcher watcher, Stat stat)
    // 异步
    getChildren(String path, boolean watch, ChildrenCallback callBack, Object ctx)    
    getChildren(String path, Watcher watcher, ChildrenCallback callBack, Object ctx)
    getChildren(String path, Watcher watcher, Children2Callback callBack, Object ctx)    
    getChildren(String path, boolean watch, Children2Callback callBack, Object ctx)
  • 参数 解释
    path 节点路径
    boolean  
    callBack 异步回调,可以获取节点列表
    ctx 传递上下文参数
  •     public static void getChildren_1() throws Exception{
           List<String> hadoop = zookeeper.getChildren("/hadoop", false);
           hadoop.forEach(System.out::println);
      }

       public static void getChildren_2() throws Exception {
           zookeeper.getChildren("/hadoop", false, new AsyncCallback.ChildrenCallback() {
               @Override
               public void processResult(int rc, String path, Object ctx, List<String> list) {
                   list.forEach(System.out::println);
                   System.out.println(rc + " " + path + " " + ctx);
              }
          }, "I am children");
           TimeUnit.SECONDS.sleep(3);
      }
检查节点是否存在

同步、异步

  • // 同步
    exists(String path, boolean watch)
    exists(String path, Watcher watcher)
    // 异步
    exists(String path, boolean watch, StatCallback cb, Object ctx)
    exists(String path, Watcher watcher, StatCallback cb, Object ctx)
  • 参数 解释
    path 节点路径
    boolean  
    callBack 异步回调,可以获取节点列表
    ctx 传递上下文参数
  • public static void exists1() throws Exception{
       Stat exists = zookeeper.exists("/hadoopx", false);
       // 判空
       System.out.println(exists.getVersion() + "成功");
    }
    public static void exists2() throws Exception{
       zookeeper.exists("/hadoopx", false, new AsyncCallback.StatCallback() {
           @Override
           public void processResult(int rc, String path, Object ctx, Stat stat) {
               // 判空
               System.out.println(rc + " " + path + " " + ctx +" " + stat.getVersion());
          }
      }, "I am children");
       TimeUnit.SECONDS.sleep(1);
    }

3、zookeeper在java使用的API的更多相关文章

  1. zookeeper的Java端API应用

    1. 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话.它提供了表1所示几类主要方法: 功能 描述 create 在本地目录树中创建 ...

  2. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  3. Linux -- 基于zookeeper的java api(一)

    Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...

  4. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

  5. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  6. ZooKeeper(3.4.5) - 原生 API 的简单示例

    一.创建会话 1. 创建一个基本的ZooKeeper会话实例 package com.huey.dream.demo; import java.util.concurrent.CountDownLat ...

  7. 七:zooKeeper开源客户端ZkClient的api测试

    ZkClient是Gitthub上一个开源的ZooKeeper客户端.ZKClient在ZooKeeper原生API接口之上进行了包装,是一个更加易用的ZooKeeper客户端.同时ZKClient在 ...

  8. 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 说明 ...

  9. ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用

    zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...

  10. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

随机推荐

  1. Linux挂载新磁盘到根目录

    1.添加磁盘到需要挂载的机器上2.lsblk查看硬盘挂载情况,sdb,sdc为我新挂载的磁盘 3.fdisk -l查看挂载之前的分区情况, 4.为新硬盘创建分区 fdisk /dev/sdb,终端会提 ...

  2. 微信小程序-页面跳转Tabbar

    官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 首先我们 ...

  3. 找工作、备考、面试刷题网站推荐(牛客网、力扣、计蒜客、hihocoder、七月在线)以及acm竞赛oj

    不管是找工作笔试面试白板试进大厂,还是研究生参加初试复试,数据结构和算法都是都是重中之重,刷题就很必要,来拿走自己的offer 吧! 一.offer刷题推荐 1.牛客网 链接:牛客网 - 找工作神器| ...

  4. 8.1 C++ 标准输入输出流

    C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...

  5. ::v-deep样式穿透

    //如果不加样式穿透,vue永远会在input后面加唯一样式字段data-v-1d9b105c //::v-deep拼在哪个位置,哪个位置就有唯一标识data-v-1d9b105c .divBox : ...

  6. 遥感图像处理笔记之【Automatic Flood Detection from Satellite Images Using Deep Learning】

    遥感图像处理学习(7) 前言 遥感系列第7篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月29日 2024年1月24日搬运至本人博客园平台 文章标题:Automatic Fl ...

  7. LeetCode刷题日记2020/8/22

    题目 24点程序 描述 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: ...

  8. IDEA破解(无限重启激活时间版)

    下载地址[将下载的目录打成zip压缩包后使用]:「ide-eval-resetter」https://www.aliyundrive.com/s/UFHpDX5d6Xv 点击链接保存,或者复制本段内容 ...

  9. STM32CubeMX教程30 USB_DEVICE - MSC外设_读卡器

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ...

  10. Intellij IDEA 中 .properties文件中文乱码

    在别的地方显示正常的 application.properties 文件,放到 idea 中就会有乱码,如下图所示 idea 右下角编码那里还是灰色的,不能更改 解决方法 点开 idea 的 sett ...