Zookeeper Zkclient客户端
Zkclient是对Zookeeper的原生API进行了包装,实现了超时重连、Watcher反复注册等功能,它可以实现递归创建,删除节点,但是zkClient不能递归给节点赋值。
主要的api如下:
创建永久节点:
public void createPersistent(String path)
public void createPersistent(String path, Object data)
public void createPersistent(String path, Object data, List<ACL> acl)
创建临时节点:
public void createEphemeral(final String path)
public void createEphemeral(final String path, final Object data)
public void createEphemeral(final String path, final Object data, final List<ACL> acl)
删除节点:
public boolean delete(final String path)
public boolean delete(final String path, final int version)
public boolean deleteRecursive(String path)(递归删除节点,在原生api,如果一个节点存在子节点,那么它将无法直接删除,必须一层层遍历先删除全部子节点,然后才能将目标节点删除)
读取节点:
public List<String> getChildren(String path)
更新数据:
public void writeData(String path, Object object)
public void writeData(final String path, Object datat, final int expectedVersion)
判断节点是否存在:
protected boolean exists(final String path, final boolean watch)
注册监听事件:
ZkClient的subscribeChildChanges方法
ZkClient的subscribeDataChanges方法
下面看一个测试,首先导入包:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
package com.test.protobuf; import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient; import java.util.List; /**
* Created by szekinwin on 2017/7/8.
*/
public class ZkClientDemo { //zookeeper连接地址
private static final String CONNECT_ADR="172.31.19.222:2181,172.31.19.223:2181,172.31.19.234:2181"; public static void main(String[]args){ //5000,连接超时时间
ZkClient zkClient = new ZkClient(CONNECT_ADR,5000); System.out.println("Connect successfully.."); String path="/testRoot";
//监听节点 subscribeChildChanges 监听当前节点以及子节点增加或者删除
zkClient.subscribeChildChanges(path, new IZkChildListener() {
public void handleChildChange(String s, List<String> list) throws Exception {
System.out.println("路径:"+s);
System.out.println("变更的节点为:"+list);
}
});
//监听节点 subscribeDataChanges 监听当前节点以及子节点内容的变更
zkClient.subscribeDataChanges(path, new IZkDataListener() {
public void handleDataChange(String s, Object o) throws Exception {
System.out.println("路径:"+s);
System.out.println("变更的内容为:"+o.toString());
} public void handleDataDeleted(String s) throws Exception {
System.out.println("路径:"+s);
}
});
//创建节点 true表示递归创建
zkClient.createPersistent("/testRoot/children",true);
//修改节点信息
zkClient.writeData("/testRoot","testRoot");
zkClient.writeData("/testRoot","new testRoot");
//修改子节点信息
zkClient.writeData("/testRoot/children","testRoot children");
//递归删除节点
zkClient.deleteRecursive(path);
try {
Thread.sleep(50000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Zookeeper Zkclient客户端的更多相关文章
- .NET Core)的ZooKeeper异步客户端
支持断线重连.永久watcher.递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端 阅读目录 什么是ZooKeeper? 项目介绍 提供的功能 使用说明 FAQ 在公司内部 ...
- zookeeper curator客户端之增删改查
zookeeper curator客户端之增删改查 zookeeper安装:https://www.cnblogs.com/zwcry/p/10272506.html curator客户端是Apach ...
- ZooKeeper单机客户端的启动流程源码阅读
客户端的启动流程 看上面的客户端启动的脚本图,可以看到,zookeeper客户端脚本运行的入口ZookeeperMain.java的main()方法, 关于这个类可以理解成它是程序启动的辅助类,由它提 ...
- Zookeeper(一)客户端
Zookeeper-客户端 例子: // org.apache.zookeeper.ZooKeeperMain public class ZooKeeperMain { public static v ...
- 基于Zookeeper实现客户端动态监听服务器上下线
一.在具体实现之前,先来了解一下Zookeeper的监听器的原理: 图中Main()线程作为客户端,当在主线程中创建Zookeeper客户端时,会默认创建两个子线程:Listener和connect, ...
- 为什么dubbo使用ZkClient作为zookeeper的客户端
本文内容并非原创,使用资料均来自互联网. dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问 ...
- 七:zooKeeper开源客户端ZkClient的api测试
ZkClient是Gitthub上一个开源的ZooKeeper客户端.ZKClient在ZooKeeper原生API接口之上进行了包装,是一个更加易用的ZooKeeper客户端.同时ZKClient在 ...
- zookeeper之三 ZKClient客户端的使用
ZKClient在原生API接口上进行了包装,同时在内部实现了诸如session超时重连.watcher反复注册等功能,使得zookeeper客户端繁琐的细节对开发人员透明.下面将从以下几个方面来使用 ...
- Zookeeper开源客户端框架Curator简介
Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...
随机推荐
- 安装和使用PhantomJS
一.安装PhantomJS(linux环境安装) 将PhantomJS下载在/usr/local/src/packet/目录下(这个看个人喜好) 操作系统:CentOS 7 64-bit 1.下载地址 ...
- 剑指Offer——把字符串转换成整数
题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果 ...
- System.ArgumentException: 字体“Courier New”不支持样式“Regular”。
使用MongoVUE,发现报错,报错信息如下: System.ArgumentException: 字体“Courier New”不支持样式“Regular”. 说明本机字体安装不够:需安装完整的Co ...
- Spark Standalone Mode 单机启动Spark -- 分布式计算系统spark学习(一)
spark是个啥? Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发. Spark和Hadoop有什么不同呢? Spark是基于map reduce算法实现的分布式计算,拥 ...
- 【opencv入门篇】 10个程序快速上手opencv【下】
导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) 上篇传送:http: ...
- ReferenceQueue
@Test public void strongReference() { Object referent = new Object(); /** * 通过赋值创建 StrongReference * ...
- (0.2.6)Mysql安装——编译安装
(0.2.6)Mysql安装——编译安装 待完善
- django 模板语言之 simple_tag 自定义模板
自定义函数 simple_tag a. app项目下创建templatetags目录 b. 创建任意xxoo.py文件 用做自定义py函数 c. 创建template对象 register 在函数或者 ...
- POJ-3131-Cubic Eight-Puzzle(双向BFS+哈希)
Description Let's play a puzzle using eight cubes placed on a 3 × 3 board leaving one empty square. ...
- intellij idea 重命名或复制一个项目(不用重启)
Idea 内无法直接修改Explorer 里文件夹的名称,只能手动改文件夹的名称. 目前找到的最好的方法: 1)重命名一个项目 在Idea 项目关闭状态下,在 Explorer (Windows) / ...