Zookeeper学习笔记(三)——java客户端代码操作
Zookeeper客户端java代码操作
上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作。通过查阅API,发现并不困难。
1. 首先获得客户端与服务器的连接
//zookeeper客户端
private ZooKeeper zkCli;
//连接地址
private static final String CONNECT_STRING = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
//session过期时间
private static final int SESSION_TIMEOUT = 2000;
/**
* 创建客户端实例对象
*
* @throws IOException
*/
@Before
public void before() throws IOException {
zkCli = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, (event) -> {
System.out.println("默认的回调函数");
});
}
2. 列出根节点下的子节点(非递归)
@Test
public void ls() throws KeeperException, InterruptedException {
List<String> children = zkCli.getChildren("/", e -> {
System.out.println("自定义回调函数");
});
System.out.println("---------------------");
for (String child : children) {
System.out.println(child);
}
System.out.println("+++++++++++++++++++++");
Thread.sleep(Long.MAX_VALUE);
}
3. 在一个节点下创建子节点
@Test
public void create() throws KeeperException, InterruptedException {
//parameter1:创建的节点路径 parameter2:节点的数据 parameter3:节点权限 parameter4:节点类型
String str = zkCli.create("/idea", "idea2019".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println(str);
Thread.sleep(Long.MAX_VALUE);
}
4. 获取指定节点的内容
@Test
public void get() throws KeeperException, InterruptedException {
byte[] data = zkCli.getData("/simon", true, new Stat());
String str = new String(data);
System.out.println(str);
}
5. 给指定节点设置值
@Test
public void set() throws KeeperException, InterruptedException {
Stat stat = zkCli.setData("/simon", "abcd".getBytes(), 1);
System.out.println(stat.getDataLength());
}
6. 获取指定节点的状态信息
@Test
public void stat() throws KeeperException, InterruptedException {
Stat exists = zkCli.exists("/ideaa", false);
if (exists == null) {
System.out.println("节点不存在");
} else {
System.out.println(exists.getDataLength());
}
}
7. 删除指定节点
@Test
public void delete() throws KeeperException, InterruptedException {
Stat exists = zkCli.exists("/idea", false);
if (exists != null) {
zkCli.delete("/idea", exists.getVersion());
}
}
8. 循环注册,动态获取节点的信息。
也就是当节点有任何变化时,就会调用回调函数,动态的显示节点的变化信息。
@Test
public void register() throws KeeperException, InterruptedException {
byte[] data = zkCli.getData("/simon2", new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
try {
register();//发生事件,通知的时候在注册一遍,实现了循环调用
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, null);
System.out.println(new String(data));
}
@Test
public void testRegister() {
try {
register(); //调用register()方法,将进程卡住,循环执行register
Thread.sleep(Long.MAX_VALUE);
} catch (Exception e) {
e.printStackTrace();
}
}
代码很简单易懂,只是有些内部原理还是有些模糊,例如:Stat是什么?zookeeper是怎么监听到节点发生变化的?又是如何将变化通知给客户端的?在之后的博客中将会详细记录。~
Zookeeper学习笔记(三)——java客户端代码操作的更多相关文章
- ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心
作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- Java学习笔记三:Java的变量、常量、变量的类型及使用规则
Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...
- MYSQL初级学习笔记三:数据的操作DML!(视频序号:初级_24,25,36)
知识点五:数据的操作DML(24,25,36) 插入数据: --测试插入记录INSERT CREATE TABLE IF NOT EXISTS user13( id TINYINT UNSIGNED ...
- Java 学习笔记 (三) Java 日期类型
以下内容摘自: https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...
- SQL学习笔记三之MySQL表操作
阅读目录 一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 存储引擎介绍 存储引擎即表类型,mys ...
- Hibernate学习笔记三:常用数据库操作语句
转载请注明原文地址: 一:HQL 1:HQL语句格式:select from POJO类名 where 条件表达式 group by 属性 having 聚集函数 order by 属性 [其中,fr ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
随机推荐
- mysql 字符类以及重复元字符
字符类 [:alnum:]=[a-zA-Z0-] [:alpha:]=[a-zA-Z] [:digit:]=[-] [:lower:]=[a-z] [:upper:]=[A-Z] [:xdigit:] ...
- C++2.0新特性(六)——<Smart Pointer(智能指针)之shared_ptr>
Smart Pointer(智能指针)指的是一类指针,并不是单一某一个指针,它能知道自己被引用的个数以至于在最后一个引用消失时销毁它指向的对象,本文主要介绍C++2.0提供的新东西 一.Smart P ...
- uniapp - 如何申请阿里云存储
长话短说,简略表述 1. 登录阿里云,选择 oos对象云存储 https://oss.console.aliyun.com/overview 2. 新建“Bucket”,名称是唯一的(建议用公司或者个 ...
- plsql 的三种循环
set serveroutput on declare pnum ; begin loop dbms_output.put_line(pnum); pnum :; end loop; end; / s ...
- 网页视频直播、微信视频直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的直播接入需求
背景分析 熟悉EasyNVR产品的朋友们都知道,EasyNVR不仅可以独成体系,而且还可以跟其他系列产品相配合,形成各种不同类型的解决方案,满足各种不同应用场景的实际需求.针对很多设备现场没有固定公网 ...
- 【Ubuntu升级python3.5到python3.6】dpkg-deb: error: subprocess paste was killed by signal (Broken pipe) Errors were encountered while processing: E: Sub-process /usr/bin/dpkg returned an error code (1) 问题解决
Ubuntu16.04上将系统自带的python3.5升级到3.6 安装aioredis时提示Python版本需>=3.5.3,所以进行升级命令如下: $ sudo add-apt-reposi ...
- LODOP打印项水平居中
LODOP控制打印项水平居中,可以用如下语句,该语句控制的是打印项本身在纸张中水平居中.LODOP.SET_PRINT_STYLEA(0,"Horient",2);这个根据大的打印 ...
- [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历 II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历
Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...
- TestDirector(TD)—测试管理工具
简介 TestDirector是全球最大的软件测试工具提供商Mercury Interactive公司生产的企业级测试管理工具,也是业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球 ...