3、zookeeper在java使用的API
引入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)
参数 解释 pathznode路径data数据 acl要创建的节点的访问控制列表。 zookeeper API提供了一个静态接口ZooDefs.Ids来获取一些基本的acl列表。例如,ZooDefs.Ids.OPEN_ACL_UNSAFE返回打开znode的acl列表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节点路径 booleancallBack异步回调,可以获取节点列表 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节点路径 booleancallBack异步回调,可以获取节点列表 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的更多相关文章
- zookeeper的Java端API应用
1. 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话.它提供了表1所示几类主要方法: 功能 描述 create 在本地目录树中创建 ...
- Linux -- 基于zookeeper的java api(二)
Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...
- Linux -- 基于zookeeper的java api(一)
Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...
- Zookeeper的java客户端API使用方法(五)
前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...
- zookeeper的java api操作
zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...
- ZooKeeper(3.4.5) - 原生 API 的简单示例
一.创建会话 1. 创建一个基本的ZooKeeper会话实例 package com.huey.dream.demo; import java.util.concurrent.CountDownLat ...
- 七:zooKeeper开源客户端ZkClient的api测试
ZkClient是Gitthub上一个开源的ZooKeeper客户端.ZKClient在ZooKeeper原生API接口之上进行了包装,是一个更加易用的ZooKeeper客户端.同时ZKClient在 ...
- 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)
一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 说明 ...
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
随机推荐
- 1.14 手工插入ShellCode反弹
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...
- 4.0 Python 变量与作用域
在python中,变量的作用域决定了变量在哪些位置可以被访问.一个程序中的变量并不是所有的地方都可以访问的,其访问权限决定于变量的赋值位置.python中有两种最基本的变量作用域:局部作用域和全局作用 ...
- 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】
今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现!话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://bl ...
- 解决Python报错SSLError,如果试了网上一大堆方法还不行,看看这个吧!!
前言 这个问题困扰了群友一天,我怀着好奇心去试试看,不到5分钟给解决了哈哈. 报错代码 报错代码中对相关的host和url进行了替换,大家在网上发布内容也要注意隐私哈,多长个心眼子总没错. reque ...
- (C语言)每日代码||2023.12.27||关于(++i)+(++i)以及(++i)+(i = 100)
#include <stdio.h> int main() { int i = 1; int a = (++i) + (++i); printf("a = %d,i = %d\n ...
- 使用 BrowserView 的注意事项!!
请看gif:
- .NET Core开发实战(第29课:定义仓储:使用EF Core实现仓储层)--学习笔记
29 | 定义仓储:使用EF Core实现仓储层 首先定义仓储层的接口,以及仓储层实现的基类,抽象类 仓储层的接口 namespace GeekTime.Infrastructure.Core { / ...
- Power BI 12 DAY
电商平台流量分析 案例练习 参数建模 建模-->新建参数 新建度量值使用SWITCH函数将需要的指标数据化 15.关键指标 = switch([指标选择 值],1,[1.访客数合计],2,[2. ...
- NEMU PA 3-1 实验报告
一.实验目的 在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器.那么在整个PA3中,我们将要着力于内存的相关处理,如Cache ...
- FUN GAME 一款普通的C++游戏
凑合看吧,不是完整版. #include<bits/stdc++.h> #include<windows.h> #include<conio.h> using na ...