文档章节

ZooKeeper写事件与出发watcher的对应关系

Decylus
 Decylus
发布于 2015/07/27 14:20
字数 311
阅读 80
收藏 0

下面表格列出了写操作与ZK内部产生的事件的对应关系:

event For "/path" event For "/path/child"
create("/path") EventType.NodeCreated NA
delete("/path") EventType.NodeDeleted NA
setData("/path") EventType.NodeDataChanged NA
create("/path/child") EventType.NodeChildrenChanged EventType.NodeCreated
delete("/path/child") EventType.NodeChildrenChanged EventType.NodeDeleted
setData("/path/child") NA EventType.NodeDataChanged

而ZK内部的写事件与所触发的watcher的对应关系如下:

event For "/path" defaultWatcher exists
("/path")
getData
("/path")
getChildren
("/path")
EventType.None
EventType.NodeCreated
EventType.NodeDeleted √(不正常)
EventType.NodeDataChanged
EventType.NodeChildrenChanged

综合上面两个表,我们可以总结出各种写操作可以触发哪些watcher,如下表所示:

"/path" "/path/child"
exists getData getChildren exists getData getChildren
create("/path")
delete("/path")
setData("/path")
create("/path/child")
delete("/path/child")
setData("/path/child")

如果发生session close、authFail和invalid,那么所有类型的wather都会被触发

zkClient除了做了一些便捷包装之外,对watcher使用做了一点增强。比如subscribeChildChanges实际上是通过exists和getChildren关注了两个事件。这样当create("/path")时,对应path上通过getChildren注册的listener也会被调用。另外subscribeDataChanges实际上只是通过exists注册了事件。因为从上表可以看到,对于一个更新,通过exists和getData注册的watcher要么都会触发,要么都不会触发。

zkClient地址:https://github.com/sgroschupf/zkclient

本文转载自:http://jm-blog.aliapp.com/?p=1047

Decylus
粉丝 2
博文 6
码字总数 1470
作品 0
成都
私信 提问
ZooKeeper的Watcher机制

ZooKeeper 提供了分布式数据的发布/订阅功能。 在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。 ZooKeeper 允许客户端向服务端注册一个 Watcher 监听, 当服务器的一些特...

Java搬砖工程师
2018/11/19
290
0
ZooKeeper源码解析(二)-Java编程API

ZooKeeper还为客户端提供了Java API编程接口的方式。API接口主要是ZooKeeper类中的方法,下面列举几个常用的客户端操作的Java代码示例。 create 创建ZooKeeper路径节点,参数需提供路径名称和...

守望者之父
2017/06/18
20
0
Zookeeper系列(二):Java API开发

ZooKeeper还为客户端提供了Java API编程接口的方式。API接口主要是ZooKeeper类中的方法,下面列举几个常用的客户端操作的Java代码示例。 1、create 创建ZooKeeper路径节点,参数需提供路径名...

守望者之父
09/06
31
0
ZooKeeper技术内幕-系统模型

系统模型 数据模型 ZooKeeper视图机构和标准Unix 文件系统非常相似,使用了数据节点(ZNode) ZNode是ZooKeeper数据的最小单元 ZNode可以挂在子节点,保存数据信息 ZNode层次化,树结构存储 ...

Java搬砖工程师
2018/11/20
41
0
[ZooKeeper]基于Java API 实践

前提 建立maven项目中 要导入zookeeper的依赖 我们同时可以打开linux中的zookeeper客户端来验证对比。输入 zkCli.sh 便可以进入zookeeper客户端 。 一、建立连接 直接建立连接后,不进行等待...

瑾兰
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
23分钟前
2
0
网络七层模型与TCP/UDP

为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。本文首先...

爱宝贝丶
26分钟前
2
0
Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
44分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
58分钟前
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
681
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部