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客户端的更多相关文章

  1. .NET Core)的ZooKeeper异步客户端

    支持断线重连.永久watcher.递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端   阅读目录 什么是ZooKeeper? 项目介绍 提供的功能 使用说明 FAQ 在公司内部 ...

  2. zookeeper curator客户端之增删改查

    zookeeper curator客户端之增删改查 zookeeper安装:https://www.cnblogs.com/zwcry/p/10272506.html curator客户端是Apach ...

  3. ZooKeeper单机客户端的启动流程源码阅读

    客户端的启动流程 看上面的客户端启动的脚本图,可以看到,zookeeper客户端脚本运行的入口ZookeeperMain.java的main()方法, 关于这个类可以理解成它是程序启动的辅助类,由它提 ...

  4. Zookeeper(一)客户端

    Zookeeper-客户端 例子: // org.apache.zookeeper.ZooKeeperMain public class ZooKeeperMain { public static v ...

  5. 基于Zookeeper实现客户端动态监听服务器上下线

    一.在具体实现之前,先来了解一下Zookeeper的监听器的原理: 图中Main()线程作为客户端,当在主线程中创建Zookeeper客户端时,会默认创建两个子线程:Listener和connect, ...

  6. 为什么dubbo使用ZkClient作为zookeeper的客户端

    本文内容并非原创,使用资料均来自互联网. dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问 ...

  7. 七:zooKeeper开源客户端ZkClient的api测试

    ZkClient是Gitthub上一个开源的ZooKeeper客户端.ZKClient在ZooKeeper原生API接口之上进行了包装,是一个更加易用的ZooKeeper客户端.同时ZKClient在 ...

  8. zookeeper之三 ZKClient客户端的使用

    ZKClient在原生API接口上进行了包装,同时在内部实现了诸如session超时重连.watcher反复注册等功能,使得zookeeper客户端繁琐的细节对开发人员透明.下面将从以下几个方面来使用 ...

  9. Zookeeper开源客户端框架Curator简介

    Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...

随机推荐

  1. python widows安裝scipy

    https://blog.csdn.net/github_39611196/article/details/76718707 Python3.x直接运行pip install scipy即可.Pyth ...

  2. nginx 哈希表结构图

  3. java 字符串截取的方法

    1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...

  4. C#生成电子印章源码

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  5. 重新编写equals()方法,hashCode()方法,以及toString(),提供自定义的相等标准,以及自描述方法

    下面给出一个实例,重新编写equals()方法,提供自定义的相等标准 public class PersonTest { public static void main(String[] args) ...

  6. Spring框架第二篇之Bean的装配

    一.默认装配方式 代码通过getBean();方式从容器中获取指定的Bean实例,容器首先会调用Bean类的无参构造器,创建空值的实例对象. 举例: 首先我在applicationContext.xm ...

  7. node的3大作用域

    除了持久性存储外,想要内存也可以存入数据,来做计算什么数据都存入访问一便数据库,效率就太低了 java有3大作用域request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应 ...

  8. [Deep Learning]学习资料积累

    1. ufldl教程√ Andrew Ng的教程,matlab代码. 2. Neural Network and Deep Learning√: 一本未写完的书,非常细致,对基础的概念比如cross ...

  9. Elasticsearch、MongoDB、Hadoop适用场景

    如果你仅仅想要通过关键字和简单的分析,那么Elasticsearch可以完成任务: 如果你需要查询文档,并且包含更加复杂的分析过程,那么MongoDB相当适合: 如果你有一个海量的数据,需要大量不同的 ...

  10. # 20145103《Java程序设计》第6周学习总结

    20145103<Java程序设计>第6周学习总结 教材学习内容总结 第十章 第十章输入和输出 10.1.1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出 ...