zookeeper事件监听机制

  1. watcher的概念
    zookeeper提供了数据的发布订阅功能,多个订阅者可同时监听某一特定主题对象,当该主题对象的自身状态发生变化时(例如节点内容发生变化,节点下的子节点列表发生变化)会实时,主动通知订阅者;
    zookeeper采用watcher机制实现了发布/订阅功能.该机制在被订阅者对象发生变化的时候会异步的通知客户端,因此客户端不必在watcher注册后轮询阻塞,从而减轻客户端的压力.

  2. watcher的架构
    watcher实现由三部分组成
    zookeeper服务端
    zookeeper客户端
    客户端的ZKWatchManager对象
    客户端首先将Watcher注册到服务器上,同时将Watcher对象保存在客户端的Watch管理器中,当Zookeeper服务端监听的数据状态发生变化时,服务端会首先主动通知客户端,接着客户端的Watch管理器会触发相关Watcher来回调相应的处理逻辑,从而完成整体的数据发布/订阅流程

  3. watcher特性

    特性说明
    一次性watcher是一次性的,一旦触发就会移除,再次使用就需要重新注册
    户端顺序执行watcher回调时顺序串行化执行的,只有回调后客户端才能看到最新的数据状态
    量级watchEvent是最小的通信单元,结构上只包含通知状态,事件类型和节点路径,并不会告诉数据节点变化前后的具体内容
    时效性watcher只有在当前session彻底失效时才会生效,若在session有效期内快速重连成功,则watcher依然存在,仍可以接收到通知
  4. watcher通知状态
    KeepState时客户端与服务器端连接状态发生变化时对应的通知类型.

    举属性说明
    SyncConnected客户端与服务器正常连接时
    Disconnected客户端与服务器断开连接时
    Expired会话session失效时
    AuthFailed身份认证失败时
  5. Watcher的事件类型
    EventType是数据节点(znode)发生变化时对应的通知类型,EventType变化时KeeperState永远处于SyncConnected通知状态下,当KeeperState发生变化时,EventType永远为None

    枚举类型说明
    None
    NodeCreatedWatcher监听的数据节点被创建时
    NodeDeletedWatcher监听的数据节点被删除时
    NodeDataChangedWatcher监听的数据节点内容发生变更时
    NodeChildrenChangedWatcher监听的数据节点的子节点发生变化时
  6. 捕获相应的事件

    注册方式CreatedChildrenChangedChangedDeleted
    zk.exists("/node",watcher)可监控可监控可监控
    zk.getData("/node",watcher)可监控可监控
    zk.getChildren("/node",watcher)可监控可监控
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值