Zookeeper3.5.7版本——客户端命令行操作(监听器原理)
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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收到子节点变化的监听,如下图:
-
注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。
以上是关于Zookeeper3.5.7版本——客户端命令行操作(监听器原理)的主要内容,如果未能解决你的问题,请参考以下文章
Zookeeper3.5.7版本——客户端命令行操作(znode 节点数据信息)
Zookeeper3.5.7版本——客户端命令行操作(节点删除与查看)
Zookeeper3.5.7版本——客户端命令行操作(监听器原理)