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)的更多相关文章

  1. zookeeper客户端使用第三方(zkclient)封装的Api操作节点

    1.引入依赖 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</a ...

  2. ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用

    这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...

  3. Zookeeper客户端对比选择_4

    Zookeeper客户端对比选择 本文思维导图 使用框架的好处是自带一套实用的API,但是Zookeeper虽然非常强大,但是社区却安静的可怕,版本更新较慢,下面会先从zookeeper原生API的不 ...

  4. 【分布式】Zookeeper客户端

    一.前言 前篇博客分析了Zookeeper的序列化和通信协议,接着继续学习客户端,客户端是开发人员使用Zookeeper最主要的途径,很有必要弄懂客户端是如何与服务端通信的. 二.客户端 2.1 客户 ...

  5. zookeeper 客户端编程

    zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...

  6. ZooKeeper客户端事件串行化处理

    为了提升系统的性能,进一步提高系统的吞吐能力,最近公司很多系统都在进行异步化改造.在异步化改造的过程中,肯定会比以前碰到更多的多线程问题,上周就碰到ZooKeeper客户端异步化过程中的一个死锁问题, ...

  7. zookeeper客户端操作

    ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server ...

  8. zookeeper客户端 zkCli使用及常用命令

    上篇(http://www.cnblogs.com/yangzhenlong/p/8270835.html)zk伪集群搭建好后,使用zkCli连接zk服务 切换到zk1/bin 目录,执行zkCli. ...

  9. Zookeeper客户端Curator基本API

    在使用zookeper的时候一般不使用原生的API,Curator,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsExceptio ...

随机推荐

  1. Java中的23种设计模式与7大原则

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

  2. OpenCV学习笔记(8)——图像平滑

    使用不同的低筒滤波器对图像进行模糊 使用自定义的率弄起对图像进行卷积(2D卷积) 2D卷积 与信号一样,我们也可以对2D图像实施低通滤波,高通滤波等.LPF帮助我们去除噪声,模糊图像.而HPF帮助我们 ...

  3. FragmentFactory

    import android.support.v4.app.Fragment; import java.util.HashMap; public class FragmentFactory { pri ...

  4. 代码实现:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; //有n个人围成一圈,顺序排号.从第一个人开始 ...

  5. GIS开源程序收集

    每一个项目包含以下信息: 名称 主题 分类 描述 开始时间 语言 许可 演示网址 项目网址 成熟度 活跃度 评价   分类包括:GIS基础函数库.GIS控件.GIS桌面程序.GIS数据引擎.WEBGI ...

  6. 阶段3 2.Spring_08.面向切面编程 AOP_6 四种常用通知类型

    新建项目 复制上节课的pom.xml内的代码 复制java下的代码 测试类也复制过来 配置文件也拷贝过来 logge下增加几个方法 测试方法只需要一个saveAccount方法就可以了 增加其他三种通 ...

  7. 阶段3 2.Spring_02.程序间耦合_1 编写jdbc的工程代码用于分析程序的耦合

    创建新项目.不选择骨架 打包方式选择是jar 增加mysql的包依赖 创建demo类来讲解程序的耦合 原来里面提供了sql语句.拿到mysql没执行

  8. 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题

    这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...

  9. linux 设备树中 dwc3 节点的phys参数含义

    找了好久今天找到了,记录一下: &dwc3_0 { ... phys = <&lane3 PHY_TYPE_USB3 1 2 26000000>; ... } Requir ...

  10. SSM的开发步骤分析

    完整开发步骤 导包 spring的jar包 mybatis的jar包 mybatis-Spring的jar包 aop的依赖jar包 oracle等数据库连接的jar包 DataSource的jar包 ...