初步认识zookeeper(4)--JavaAPI Watcher事件

目录概要

  • 一、简介
  • 二、Watcher特性
  • 三、如何注册事件机制
  • 四、Watcher事件类型
  • 五、代码实操

一、简介
Watcher 监听机制是 Zookeeper 中非常重要的特性,我们
基于 zookeeper 上创建的节点,可以对这些节点绑定监听
事件,比如可以监听节点数据变更、节点删除、子节点状
态变更等事件,通过这个事件机制,可以基于 zookeeper
实现分布式锁、集群管理等功能

二、Watcher 特性
当数据发生变化的时候, zookeeper 会产
生一个 watcher 事件,并且会发送到客户端。但是客户端
只会收到一次通知。如果后续这个节点再次发生变化,那
么之前设置 watcher 的客户端不会再次收到消息。
(watcher 是一次性的操作)。 可以通过循环监听去达到
永久监听效果

三、如何注册事件机制
通过这三个操作来绑定事件 :getData、Exists、getChildren
如何触发事件? 凡是事务类型的操作,都会触发监听事件。create /delete /setData
四、Watcher 事件类型

类型描述
None (-1)客户端链接状态发生变化的时候,会收到 none 的事件
NodeCreated (1)创建节点的事件。
NodeDeleted (2)删除节点的事件
NodeDataChanged (3)节点数据发生变更
NodeChildrenChanged (4)子节点被创建、被删除、会发生事件触发

五、代码实操

1、geData注册监听

            Stat stat = new Stat(); 
            zookeeper.getData("/ws", new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    System.out.println("getData事件: " + watchedEvent.getType()+"路径:"+watchedEvent.getPath());  
                }
            }, stat);

注意:若第二个参数直接传true,则调用初始化连接时的watcher事件;另外两种亦是如此

zookeeper.getData("/ws",true,stat);

2、exists注册监听

            Stat stat = new Stat();
            stat = zookeeper.exists("/ws", new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    System.out.println("exists事件: " + watchedEvent.getType()+"路径:"+watchedEvent.getPath());
                    try {
                        zookeeper.exists("/ws",this);
                    } catch (KeeperException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });

3、getChildren

           zookeeper.getChildren("/ws", new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    System.out.println("getChildren事件: " + watchedEvent.getType()+"路径:"+watchedEvent.getPath());
                }
            });
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

臭小子帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值