[zookeeper]3.zookeeper监听


zookeeper有两种类型的监听

  • 监听节点目录的变化(增加删除节点)

    ls -w /path

创建/sanguo/shuguo的永久节点(注意:临时节点不允许有子节点)

[zk: localhost:2181(CONNECTED) 5] create -s /sanguo/shuguo  joke
Created /sanguo/shuguo0000000005

zkClient客户端监听/sanguo目录的变化

[zk: localhost:2181(CONNECTED) 4] ls -w /sanguo
[shuguo, shuguo0000000002, shuguo0000000003, shuguo0000000004]
[zk: localhost:2181(CONNECTED) 5]
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

  • 监听节点数据的变化(修改节点的值)

    get -w /path

客户端修改/sanguo的值

[zk: localhost:2181(CONNECTED) 0] get /sanguo
古代中国
[zk: localhost:2181(CONNECTED) 1] set /sanguo "古中国"

zkClient客户端监听/sanguo的值的改变

[zk: localhost:2181(CONNECTED) 20] get -w /sanguo
古代中国
[zk: localhost:2181(CONNECTED) 21]
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/sanguo

注意:1.客户端要先注册监听。
2.如果目录或数据发生改变,服务端通知客户端。客户端接到监听事件通知后,就不会继续监听。
3.需要重新注册监听。



zookeeper监听机制的实现

1.创建zkClient客户端。

2.zkClient的main()方法中启动两个线程。
connect线程:连接到zkServer,发送监听请求。(请求监听节点目录或者节点数据)。
Listen线程:用于等待处理zkServer的监听通知。

3.zkClient的connect线程连接到zkServer,并发送监听事件请求。

4.zkServer接收到zkClient的监听请求后,建立监听列表并将监听事件注册到列表中。

5.zkServer一旦发现注册的监听事件的发生,立即通知到zkClient。

6.zkClient的listen线程调用process()处理监听通知。

[zookeeper]3.zookeeper监听

猜你喜欢

转载自blog.51cto.com/phpme/2603710