Zookeeper 系列(四)ZKClient API

环境准备:

<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

一、ZKClient 基本用法

public class ZkClientBase {

    private static final String CONNECT_ADDR = "127.0.0.1:2181";
private static final int SEESION_OUTTIME = 5 * 1000; public static void main(String[] args) {
ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR), 10 * 1000); //1. create and delete
zkClient.createEphemeral("/temp");
zkClient.createPersistent("/super/c1", true);
zkClient.deleteRecursive("/super"); //2. 设置path和data,并且读取于节点和每个节点的内容
zkClient.createPersistent("/super", "1234");
zkClient.createPersistent("/super/c1", "c1");
zkClient.createPersistent("/super/c2", "c2"); List<String> list = zkClient.getChildren("/super");
for (String path : list) {
String rp = "/super/" + path;
System.out.println(rp + ":" + zkClient.readData(rp).toString());
} //3. 更新和判断节点是否存在
zkClient.writeData("/super/c1", "新内容");
System.out.println("/super/c1:" + zkClient.readData("/super/c1").toString());
System.out.println("/super/c1:" + zkClient.exists("/super/c1"));
} }

一、ZKClient Watcher

(一)节点变化

import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection; /**
* 监听节点变化
* @author: leigang
* @version: 2018-04-06
*/
public class zkClientWatcher2 { private static final String CONNECT_ADDR = "127.0.0.1:2181";
private static final int SEESION_OUTTIME = 5 * 1000; public static void main(String[] args) throws InterruptedException {
ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR), SEESION_OUTTIME);
zkClient.deleteRecursive("/super");
zkClient.createPersistent("/super"); // 对父节点添加子节点变化的事件
zkClient.subscribeDataChanges("/super", new IZkDataListener() {
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println("变量的节点为:" + dataPath + ",变更的内容为:" + data);
} @Override
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("删除的节点为:" + dataPath);
}
}); zkClient.writeData("/super", "super");
Thread.sleep(1000);
} }

(一)子节点变化

import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection; import java.util.List; /**
* 监听子节点变化
* @author: leigang
* @version: 2018-04-06
*/
public class zkClientWatcher { private static final String CONNECT_ADDR = "127.0.0.1:2181";
private static final int SEESION_OUTTIME = 5 * 1000; public static void main(String[] args) throws InterruptedException {
ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR), SEESION_OUTTIME);
zkClient.deleteRecursive("/super"); zkClient.subscribeChildChanges("/super", new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println("parentPath:" + parentPath);
System.out.println("currentChilds:" + currentChilds);
}
}); zkClient.createPersistent("/super");
Thread.sleep(1000); zkClient.createPersistent("/super/c1", "c1");
Thread.sleep(1000); zkClient.createPersistent("/super/c2", "c2");
Thread.sleep(1000); // 修改不会监听
zkClient.writeData("/super/c2", "c2新内容");
Thread.sleep(1000); zkClient.deleteRecursive("/super");
Thread.sleep(Integer.MAX_VALUE);
} }

Zookeeper 系列(四)ZKClient API的更多相关文章

  1. Zookeeper系列四:Zookeeper实现分布式锁、Zookeeper实现配置中心

    一.Zookeeper实现分布式锁 分布式锁主要用于在分布式环境中保证数据的一致性. 包括跨进程.跨机器.跨网络导致共享资源不一致的问题. 1. 分布式锁的实现思路 说明: 这种实现会有一个缺点,即当 ...

  2. Zookeeper系列2 原生API 以及核心特性watcher

    原生API 增删改查询 public class ZkBaseTest { static final String CONNECT_ADDR = "192.168.0.120"; ...

  3. go微服务系列(四) - http api中引入protobuf

    1. protobuf相关依赖安装 2. 改造之前的client 2.1 新建proto文件 2.2 运行protoc命令生成go文件 2.3 然后把原来的map修改成具体的类型就可以了 3. 处理j ...

  4. Natasha 4.0 探索之路系列(四) 模板 API

    Natasha 模板 Natasha 在编译单元的基础上进行了封装整理, 并提供了多种模板帮助开发者构建功能. 使用此篇的 API 前提是您对 C# 非常熟悉, 对系统的一些类型足够了解. 据此 Na ...

  5. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  6. Zookeeper 系列(五)Curator API

    Zookeeper 系列(五)Curator API 一.Curator 使用 Curator 框架中使用链式编程风格,易读性更强,使用工程方法创建连接对象使用. (1) CuratorFramewo ...

  7. 面向服务的体系架构 SOA(三) --- Zookeeper API、zkClient API的使用

    zookeeper简单介绍及API使用 1.1 zookeeper简介 zookeeper是一个针对大型分布式系统的可靠的协调系统,提供的功能包括配置维护.名字服务.分布式同步.组服务等.zookee ...

  8. 转:arcgis api for js入门开发系列四地图查询

    原文地址:arcgis api for js入门开发系列四地图查询 arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask.IdentifyTask.QueryTas ...

  9. curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API

    打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...

随机推荐

  1. python3调用C动态库

    软硬件环境 OS X EI Capitan Python 3.5.1 GCC 4.9 前言 最近在做python3开发中,碰到了一个问题,需要通过调用C的一个动态链接库来获取相应的值.扒了扒网络,动手 ...

  2. shell $*与$@的区别

    [root@bgx shell]# cat tt.sh #! /bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ echo &q ...

  3. 61. oracle给用户解锁

    1.查看用户状态select username,account_status from dba_users where username='test'; 2.解锁: ALTER USER YS_ADM ...

  4. jssip中文开发文档(完整版)

    jsSip开发文档 (官网地址:http://www.jssip.net/) 完整案例demo下载地址: http://download.csdn.net/download/qq_39421580/1 ...

  5. JAVA Spring 简单的配置和操作 ( 创建实体类, 配置XML文件, 调试 )

    < 1 > 实体类 Person package java_spring.modle; /** * 一个实体类( Person ) */ public class Person { pri ...

  6. mysql 修改用户密码

    修改mysql用户密码   目录 mysqladmin命令 UPDATE user 语句 SET PASSWORD 语句 root密码丢失的情况(待验证) mysqladmin命令(回目录) 格式如下 ...

  7. vue基础——vue实例

    创建一个vue实例 每个vue应用都是通过Vue函数创建一个新的Vue实例开始的 var vm = new Vue({ //选项 }) 一个Vue应用由一个通过new Vue创建的根Vue实例,以及可 ...

  8. tensorflow Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 错误

    Process finished with exit code 137 (interrupted by signal 9: SIGKILL) 在使用tensorflow自带的数据集做手写数字识别的时候 ...

  9. 【339】matplotlib based on python3

    Ref: python3 的 matplotlib绘图库的使用 Ref: python matplotlib绘图设置坐标轴刻度.文本 Ref: python中matplotlib的颜色及线条控制 Re ...

  10. 01Tensorflow学习之Tensorflow基本介绍

    1 tensorflow简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基 ...