Zookeeper系列2 原生API 以及核心特性watcher
原生API 增删改查询
public class ZkBaseTest {
static final String CONNECT_ADDR = "192.168.0.120";
static final CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main(String[] args) throws Exception {
// 获取zookeeper对象
ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, 20000, new Watcher() {
@Override
public void process(WatchedEvent event) {
KeeperState state = event.getState();
EventType type = event.getType();
if (KeeperState.SyncConnected == state) {
if (EventType.None == type) {
countDownLatch.countDown();
}
}
}
});
countDownLatch.await(); // 一直阻塞直到链接成功
zk.create("/test", "testdata".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
byte[] data = zk.getData("/test", false, null);
System.out.println("data " + new String(data));
zk.setData("/test", "newdata".getBytes(), -1);
byte[] afterData = zk.getData("/test", false, null);
System.out.println("afterData " + new String(afterData));
zk.delete("/test", -1); //删除过程中,需要版本检查 -1表示跳过版本检查
zk.close();
}
}
注意:节点类型分为四种 临时,临时顺序 持久 持久顺序

临时节点的有效期 是当次连接开始到当次连接结束。
实际开发中,我们一般不会使用原生APi去开发,超级不好用。一般会使用
Curator或者zkclient 后面都会介绍到
Watcher
之前提到,监控机制是zookeeper的一个核心特性。是一次性触发的。
当watch监控的数据或者节点发生变化,会通知设置了该监控的client,
即watcher。Zookeeper的watch是一次性的!!!监听一次就失效
有一下两类事件(节点相关的)以及连接zookeeper相关的状态
我们主要重点关注节点相关
可以设置观察的操作:exists,getChildren,getData
可以触发观察的操作:create,delete,setData
znode以某种方式发生变化时,“观察”(watch)机制可以让客户端得到通知.可以针对ZooKeeper服务的“操作”来设置观察,该服务的其他 操作可以触发观察.
这里需要需要注意的是:exists可以监控不存在的节点,当创建了该节点以后,则这个观察会被触发,之前的那个客户端就会得到通知.而getChildren,getData不可以
另外exists(path,true)监控的就是该path节点创建 删除 修改
而getChildren(path,watcher)监控的就是该path节点下的子节点的变化(子节点的创建、修改、删除都会监控到)这里有一点不是很友好,他们对应的事件都是一个 。我们需要自己来判断
这里可以用过保存上次getChildren获得的值 ,两个通过比较就知道具体是什么变化的了。
最后注意 :监控只是一次性的,如果要一直监控,需要多次设置。
Zookeeper系列2 原生API 以及核心特性watcher的更多相关文章
- curator框架的使用以及实现分布式锁等应用与zkclient操作zookeeper,简化复杂原生API
打开zookeeper集群 先体会一下原生API有多麻烦(可略过): //地址 static final String ADDR = "192.168.171.128:2181,192.16 ...
- Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话
一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...
- Zookeeper 系列(三)Zookeeper API
Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...
- Zookeeper 系列(五)Curator API
Zookeeper 系列(五)Curator API 一.Curator 使用 Curator 框架中使用链式编程风格,易读性更强,使用工程方法创建连接对象使用. (1) CuratorFramewo ...
- ZooKeeper 系列(一)—— ZooKeeper核心概念详解
一.Zookeeper简介 二.Zookeeper设计目标 三.核心概念 3.1 集群角色 3.2 会话 3.3 数据节点 3.4 节点 ...
- ZooKeeper系列(一)—— ZooKeeper 简介及核心概念
一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...
- 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用
温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...
- (原) 2.1 Zookeeper原生API使用
本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...
- ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用
这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...
随机推荐
- 前端-JavaScript1-2——JavaScript建立认知
关于首篇的“ Hello world ! ”这事儿吧,挺有意思,就是学习任何的语言,我们都喜欢在屏幕上直接输出一点什么,当做最简单.最基本的案例.输出什么大家随意,但是很多人都习惯输出“hello w ...
- micrometer自定义metrics
micrometer提供了基于Java的monitor facade,其与springboot应用和prometheus的集成方式如下图展示 上图中展示的很清楚,应用通过micrometer采集和暴露 ...
- Power Designer 转C#实体类方法
1.打开Power Designer菜单 Tools,选择如图 2.弹出方框中选择PD安装目录下的如图地址 3.object language选择正确目录后,可选如图语言,如C#.再填写name ...
- POJ1003 – Hangover (基础)
Hangover Description How far can you make a stack of cards overhang a table? If you have one card, ...
- ubuntu搭建php开发环境记录
这两天自己在阿里云上面买了一个ecs,系统选的是ubuntu16.04,第一件事就是先搭环境,这次准备使用lamp组合. Apache安装 首先安装apache服务器,ubuntu下面使用apt-ge ...
- 实战ELK(3) Kibana安装与简单实用
第一步:下载 https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-x86_64.rpm 第二步:安装 1.安装 yum install ...
- Calendar打印日历
package com.example.demo; import org.junit.Test; import org.junit.runner.RunWith; import org.springf ...
- python 数据分析库介绍
1 引言 高效处理数据的python工具: 与外界进行交互: 读写各种文件格式和数据库 准备: 对数据进行清理.修整.整合.规范化.重塑.切片切换.变形等处理以便进行分析 转换: 对数据集做一些数学和 ...
- 通过yum安装php7
Linux下全局安装composer方法: //下载composercurl -sS https://getcomposer.org/installer | php //将composer.phar文 ...
- [C语言]进阶|图形库
---------------------------------------------------------------------- // main.c // Created by weich ...