赞
踩
watcher的概念
zookeeper提供了数据的发布订阅功能,多个订阅者可同时监听某一特定主题对象,当该主题对象的自身状态发生变化时(例如节点内容发生变化,节点下的子节点列表发生变化)会实时,主动通知订阅者;
zookeeper采用watcher机制实现了发布/订阅功能.该机制在被订阅者对象发生变化的时候会异步的通知客户端,因此客户端不必在watcher注册后轮询阻塞,从而减轻客户端的压力.
watcher的架构
watcher实现由三部分组成
zookeeper服务端
zookeeper客户端
客户端的ZKWatchManager对象
客户端首先将Watcher注册到服务器上,同时将Watcher对象保存在客户端的Watch管理器中,当Zookeeper服务端监听的数据状态发生变化时,服务端会首先主动通知客户端,接着客户端的Watch管理器会触发相关Watcher来回调相应的处理逻辑,从而完成整体的数据发布/订阅流程
watcher特性
特性 | 说明 |
---|---|
一次性 | watcher是一次性的,一旦触发就会移除,再次使用就需要重新注册 |
户端顺序执行 | watcher回调时顺序串行化执行的,只有回调后客户端才能看到最新的数据状态 |
量级 | watchEvent是最小的通信单元,结构上只包含通知状态,事件类型和节点路径,并不会告诉数据节点变化前后的具体内容 |
时效性 | watcher只有在当前session彻底失效时才会生效,若在session有效期内快速重连成功,则watcher依然存在,仍可以接收到通知 |
watcher通知状态
KeepState时客户端与服务器端连接状态发生变化时对应的通知类型.
举属性 | 说明 |
---|---|
SyncConnected | 客户端与服务器正常连接时 |
Disconnected | 客户端与服务器断开连接时 |
Expired | 会话session失效时 |
AuthFailed | 身份认证失败时 |
Watcher的事件类型
EventType是数据节点(znode)发生变化时对应的通知类型,EventType变化时KeeperState永远处于SyncConnected通知状态下,当KeeperState发生变化时,EventType永远为None
枚举类型 | 说明 |
---|---|
None | 无 |
NodeCreated | Watcher监听的数据节点被创建时 |
NodeDeleted | Watcher监听的数据节点被删除时 |
NodeDataChanged | Watcher监听的数据节点内容发生变更时 |
NodeChildrenChanged | Watcher监听的数据节点的子节点发生变化时 |
捕获相应的事件
注册方式 | Created | ChildrenChanged | Changed | Deleted |
---|---|---|---|---|
zk.exists("/node",watcher) | 可监控 | 可监控 | 可监控 | |
zk.getData("/node",watcher) | 可监控 | 可监控 | ||
zk.getChildren("/node",watcher) | 可监控 | 可监控 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。