-
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) 可监控 可监控
zookeeper事件监听机制
最新推荐文章于 2023-08-25 08:51:59 发布