Zookeeper3.5.7版本——客户端命令行操作(监听器原理)

一、概述

  • 客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper 会通知客户端。
  • 监听机制保证 ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。

二、监听器原理

  • 首先要有一个main()线程
    在这里插入图片描述

  • 在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。
    在这里插入图片描述

  • 通过connect线程将注册的监听事件发送给Zookeeper。
    在这里插入图片描述

  • 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
    在这里插入图片描述

  • Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
    在这里插入图片描述

  • listener线程内部调用了process()方法。
    在这里插入图片描述

三、常见的监听

  • 监听节点数据的变化

    get path [watch]
    
  • 监听子节点增减的变化

    ls path [watch]
    

四、监听节点的值变化 示例

4.1、启动服务端

  • 服务端启动命令

    [root@localhost zookeeper-3.5.7]# bin/zkServer.sh start
    

    在这里插入图片描述

4.2、启动2个客户端(一个负责修改节点数据,一个负责监听)

  • 启动客户端1

    [root@localhost zookeeper-3.5.7]# bin/zkCli.sh
    

    在这里插入图片描述

  • 启动客户端2

    [root@localhost zookeeper-3.5.7]# bin/zkCli.sh
    

    在这里插入图片描述

4.3、监听节点的值变化 示例1

  • 客户端1上创建/user节点

    [zk: localhost:2181(CONNECTED) 12] create /user "zhangsan"
    

    在这里插入图片描述

  • 客户端2上注册监听/user 节点数据变化

    [zk: localhost:2181(CONNECTED) 0] get -w /user
    

    在这里插入图片描述

  • 客户端1上修改/user节点的数据

    [zk: localhost:2181(CONNECTED) 13] set /user "wangwu"
    

    在这里插入图片描述

  • 观察客户端2收到数据变化的监听,如下图:会接收到节点改变通知。
    在这里插入图片描述

  • 由上图可知:在客户端1上第一次修改/user节点的值,客户端2会接收到节点改变通知。

4.4、监听节点的值变化 示例2

  • 在示例1的基础上,继续修改客户端1中/user节点的数据

    [zk: localhost:2181(CONNECTED) 14] set /user "lisi"
    

    在这里插入图片描述

  • 再次观察客户端2收到数据变化的监听,如下图:
    在这里插入图片描述

  • 由上图可知:在客户端1上多次修改/user节点的值,客户端2不会再收到监听。因为注册一次,只能监听一次。想再次监听,需要再次注册。

五、监听节点的子节点变化(即路径变化) 示例

  • 客户端2上注册监听/user节点的子节点变化

    [zk: localhost:2181(CONNECTED) 0] ls -w /user
    

    在这里插入图片描述

  • 客户端1的 /user 节点上创建子节点

    [zk: localhost:2181(CONNECTED) 3] create /user/role "testadmin"
    

    在这里插入图片描述

  • 观察客户端2收到子节点变化的监听,如下图:
    在这里插入图片描述

  • 注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。

猜你喜欢

转载自blog.csdn.net/li1325169021/article/details/129412710