首页 理论教育 ZooKeeper监听器简介

ZooKeeper监听器简介

时间:2023-06-24 理论教育 版权反馈
【摘要】:概述ZooKeeper 可以为所有的读操作设置Watch,这些读操作包括:exists()、getChildren()及getData()。Watch 事件将被异步地发送给客户端,并且ZooKeeper 为Watch 机制提供了有序的一致性保证。Watch 由客户端所连接的ZooKeeper 服务器在本地维护,因此,Watch 可以非常容易地设置、管理和分派。注意事项ZooKeeper 的Watch 实际上要处理两类事件:1)连接状态事件这类事件不需要注册,也不需要连续触发。

ZooKeeper监听器简介

(1)概述

ZooKeeper 可以为所有的读操作设置Watch,这些读操作包括:exists()、getChildren()及getData()。Watch 事件是一次性的触发器,当Watch 的对象状态发生改变时,将会触发此对象上Watch 所对应的事件。Watch 事件将被异步地发送给客户端,并且ZooKeeper 为Watch 机制提供了有序的一致性保证。理论上客户端接收Watch 事件的时间要快于其看到Watch 对象状态变化的时间。

(2)类型

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

①数据Watch(data Watches):getData 和exists 负责设置数据Watch。

②孩子Watch(child Watches):getChildren 负责设置孩子Watch。

可以通过操作返回的数据来设置不同的Watch:

①getData 和exists:返回关于节点的数据信息。

②getChildren:返回孩子列表。

(3)Watch 注册与触发

Watch 设置操作及相应的触发器如图5.5 所示。

①exists 操作上的Watch,在被监视的Znode 创建、删除或数据更新时被触发。

②getData 操作上的Watch,在被监视的Znode 删除或数据更新时被触发。在被创建时不能被触发,因为只有Znode 一定存在,getData 操作才会成功。(www.xing528.com)

图5.5 Watch 设置操作及相应的触发器

③getChildren 操作上的Watch,在被监视的Znode 的子节点创建或删除,或是这个Znode自身被删除时被触发。可以通过查看Watch 事件类型来区分是Znode,还是它的子节点被删除:NodeDelete 表示Znode 被删除,NodeDeletedChanged 表示子节点被删除。

Watch 由客户端所连接的ZooKeeper 服务器在本地维护,因此,Watch 可以非常容易地设置、管理和分派。当客户端连接到一个新的服务器时,任何的会话事件都将可能触发Watch。另外,当从服务器断开连接时,Watch 将不会被接收。但是,当一个客户端重新建立连接时,任何先前注册过的Watch 都会被重新注册。

(4)注意事项

ZooKeeper 的Watch 实际上要处理两类事件:

1)连接状态事件

这类事件不需要注册,也不需要连续触发。

2)节点事件

节点的建立,删除,数据的修改。需要不停地注册触发,还可能发生事件丢失的情况。

上面两类事件都在Watch 中处理,也就是重载的节点事件的触发,通过函数exists、getData或getChildren 来处理这类函数,有双重作用:①注册触发事件;②函数本身的功能。

函数的本身的功能又可以用异步的回调函数来实现,重载processResult()过程中处理函数本身的功能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈