ZooKeeper入门(四) Zookeeper监视(Watches)

1 简介

Zookeeper 所有的读操作——getData(), getChildren(), 和 exists() 都 可以设置监视(watch),并且这些watch都由写操作来触发:create、delete和setData。监视事件可以理解为一次性的触发器

 

2 特性

 官方定义如下: a watch event is one-time trigger, sent to the client that set the watch, which occurs when the data for which the watch was set changes。

一次性触发:One-time trigger

当设置监视的数据发生改变时,该监视事件会被发送到客户端,例如,如果客户端调用了 getData("/znode1", true) 并且稍后 /znode1 节点上的数据发生了改变或者被删除了,客户端将会获取到 /znode1 发生变化的监视事件,而如果 /znode1 再一次发生了变化,除非客户端再次对 /znode1 设置监视,否则客户端不会收到事件通知。

发送至客户端:Sent to the client

Zookeeper 客户端和服务端是通过 socket 进行通信的,由于网络存在故障,所以监视事件很有可能不会成功地到达客户端

被设置 watch 的数据:The data for which the watch was set

这意味着 znode 节点本身具有不同的改变方式

 

3 分类

ZooKeeper所管理的watch可以分为两类: 

数据watch(data watches)

getData和exists负责设置数据watch; 

孩子watch(child watches)

getChildren负责设置孩子watch;

watch设置操作及相应的触发器如图下图所示:

 

posted @ 2017-11-09 00:40  强迫疒  阅读(616)  评论(0编辑  收藏  举报