Zookeeper客户端使用(使用zkclient)
Zookeeper客户端使用
二、使用zkclient
在pom.xml中加入依赖
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.2</version>
</dependency>
直接上代码:
/**
* Project Name:mk-project <br>
* Package Name:com.suns.zookeeper.zkclient <br>
*
* @author mk <br>
* Date:2018-10-31 11:05 <br>
*/ package com.suns.zookeeper.zkclient; import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat; import java.util.List; /**
* zkclient客户端使用
* 和原生zookeeper优点:
* 1.使用api更方便
* 2.订阅节点数据改变或者子节点变化,只需要订阅一次,便可以一直使用。而原生zookeeper的监听是一次性的,需要重复注册。
* ClassName: ZkClientTest <br>
* Description: <br>
* @author mk
* @Date 2018-10-31 11:05 <br>
* @version
*/
public class ZkClientTest { public static final String connect = "127.0.0.1:2181";
private static ZkClient zkClient = null;
private static String nodePath = "/zkclient1";
private static String nodeChildPath = "/zkclient1/n1/n11/n111/n1111"; public static void main(String[] args) throws Exception { //初始化
init(connect,5000); //订阅节点数据改变或者子节点变化,只需要订阅一次,便可以一直使用。而原生zookeeper的监听是一次性的,需要重复注册。
subscribe(); //新增
create(nodePath,"n1");
//递归新增
createRecursion(nodeChildPath,"n1"); //查询
query(nodePath); //修改
update(nodePath,"n11"); //单个节点删除
// delete(nodePath);
//递归删除
deleteRecursion(nodePath); } private static void deleteRecursion(String path) {
boolean result = zkClient.deleteRecursive(path);
System.out.println("delete:"+"["+path+"],result:"+result);
} private static void delete(String path) {
boolean result = zkClient.delete(path);
System.out.println("delete:"+"["+path+"],result:"+result);
} private static void update(String path, String data) {
Stat stat = zkClient.writeData(path, data);
System.out.println("setData:"+"["+path+"],stat:"+stat);
} private static void query(String path) {
Object o = zkClient.readData(path);
System.out.println("query:"+"["+path+"],result:"+o);
} private static void createRecursion(String path,String data) {
zkClient.createPersistent(path,true);
System.out.println("create:"+"["+path+"-->"+data);
} private static void create(String path, String data) {
boolean exists = zkClient.exists(path);
if(exists){
System.out.println("节点["+path+"]已存在,不能新增");
return;
}
String result = zkClient.create(path, data, CreateMode.PERSISTENT);
System.out.println("create:"+"["+path+"-->"+data+"],result:"+result);
} private static void subscribe() {
//订阅节点内容改变
zkClient.subscribeDataChanges(nodePath, new IZkDataListener() {
@Override
public void handleDataChange(String path, Object data) throws Exception {
System.out.println("handleDataChange----->"+path+"|"+data);
} @Override
public void handleDataDeleted(String path) throws Exception {
System.out.println("handleDataDeleted----->"+path);
}
}); //订阅子节点改变
zkClient.subscribeChildChanges(nodePath, new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> list) throws Exception {
System.out.println("handleChildChange----->"+parentPath+"|"+list);
}
}); } private static void init(String connect, int sessionTimeout) {
zkClient = new ZkClient(connect, sessionTimeout);
}
}
运行结果:

Zookeeper客户端使用(使用zkclient)的更多相关文章
- zookeeper客户端使用第三方(zkclient)封装的Api操作节点
1.引入依赖 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</a ...
- ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用
这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...
- Zookeeper客户端对比选择_4
Zookeeper客户端对比选择 本文思维导图 使用框架的好处是自带一套实用的API,但是Zookeeper虽然非常强大,但是社区却安静的可怕,版本更新较慢,下面会先从zookeeper原生API的不 ...
- 【分布式】Zookeeper客户端
一.前言 前篇博客分析了Zookeeper的序列化和通信协议,接着继续学习客户端,客户端是开发人员使用Zookeeper最主要的途径,很有必要弄懂客户端是如何与服务端通信的. 二.客户端 2.1 客户 ...
- zookeeper 客户端编程
zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...
- ZooKeeper客户端事件串行化处理
为了提升系统的性能,进一步提高系统的吞吐能力,最近公司很多系统都在进行异步化改造.在异步化改造的过程中,肯定会比以前碰到更多的多线程问题,上周就碰到ZooKeeper客户端异步化过程中的一个死锁问题, ...
- zookeeper客户端操作
ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的 zkCli.sh 就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server ...
- zookeeper客户端 zkCli使用及常用命令
上篇(http://www.cnblogs.com/yangzhenlong/p/8270835.html)zk伪集群搭建好后,使用zkCli连接zk服务 切换到zk1/bin 目录,执行zkCli. ...
- Zookeeper客户端Curator基本API
在使用zookeper的时候一般不使用原生的API,Curator,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsExceptio ...
随机推荐
- 阶段3 2.Spring_07.银行转账案例_10 使用动态代理实现事务控制
回到事物的案例中 我们现在希望用代码比较精简的这个AccountServiceImpl这个类.而不是一堆事物的AccountServiceImpl_OLD这个类 新建BeanFactory类 Acco ...
- 三十五:数据库之SQLAlchemy外建之一对多关系
准备工作 from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKeyfrom sqla ...
- Kubernetes 中文文档
Kubernetes 中文文档 如果想学习 Kubernetes 的小伙伴,可以参考如下文档学习: https://www.kubernetes.org.cn/docs 文档中详细讲解了 k8s 的设 ...
- maven将自己的springboot项目打包成jar包后,作为工具包引入其他项目,找不到jar中的类
将springboot项目打包成jar包,作为工具包导入项目后,找不到jar中的类. 原因是:springboot项目使用了自动的打包插件. 原先的插件配置: <build> <pl ...
- Oracle 数据字典视图(V$,GV$,X$)
常用的几个数据字典: user_objects : 记录了用户的所有对象,包含表.索引.过程.视图等信息,以及创建时间,状态是否有效等信息,是非DBA用户的大本营.想知道自己有哪些对象,往这里查. u ...
- java:Topic About(猴子吃桃,快速排序,选择排序,插入排序)
1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只 ...
- Windows 上第一款全局轮盘菜单软件(鼠标党进)
哈哈,我又来了. 如果之前已经有人做过了类似的,估计也没我做的好,反正我是没有见到过的
- Python日期存入elasticsearch的坑
今天在消费kafka数据到elasticsearch(以下简称es)中的时候遇到一个问题,也是一个坑,折腾了半天,后来发现得来全不费工夫,全是白忙活啊!!! 问题如下: kafka数据中有一个字段是时 ...
- unity中的常遇到的问题
1.使用unity的MovieTexture播放视频在物体上,对象只能在电脑上 2.移动端播放全屏视频 Handheld.PlayFullScreenMovie(),视频文件必须放置在Streamin ...
- 学习Go语言(二)快速入门
作为一名学习过多种编程语言的“老码农”,学习一门新的语言不能像“新手”一样,要快速入门. 无论面向过程,还是面向对象的编程语言:静态语言,动态语言,一般都包括: 标识符.变量(常量).运算符.表达式. ...