ZooKeeper Watcher 机制
ZooKeeper Watcher 机制

  1. client 向zookeeper 注册监听
  2. client注册的同时会存储一个WatchManager对象
  3. 向zookeeper发生改变则notification client 并发送一个WatchManager对象,然后client再更新该对象
package com.jacky.zk.demo;

import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;

import java.util.List;

/*
* 使用监听器
* */
public class Get_child {
    public static void main(String[] args) throws InterruptedException {
        //    获取到zkClient
        final ZkClient zkClient= new ZkClient("127.0.0.1:2181");
        //    zkClient 对指定目录进行监听(不存在的目录)
        /*
        	ps: 可以监听的事件类型:
            NodeCreated:当ZNode被创建时触发。
            NodeDeleted:当ZNode被删除时触发。
            NodeDataChanged:当ZNode的数据内容发生改变时触发。
            NodeChildrenChanged:当ZNode的子节点列表发生更改时触发(添加或删除子节点)。
            ConnectionStateChanged:与ZooKeeper服务器的连接状态发生变化时触发。   
        * */
        zkClient.subscribeChildChanges("/zk-jk", new IZkChildListener() {
		//  回调
            @Override
            public void handleChildChange(String s, List<String> children) throws Exception {
                System.out.println("error"+children);
            }
        });
        zkClient.createPersistent("/zk-jk");
        Thread.sleep(2000);
        zkClient.createPersistent("/zk-jk/cls-jk");
        Thread.sleep(2000);
        zkClient.deleteRecursive("/zk-jk/cls-jk");
        Thread.sleep(2000);
        zkClient.delete("/zk-jk");
        Thread.sleep(Integer.MAX_VALUE);
    }
}


Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐