初步认识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());
                }
            });
发布了20 篇原创文章 · 获赞 32 · 访问量 5599

猜你喜欢

转载自blog.csdn.net/shuai8624/article/details/96774699