zookeeper监听集群节点的实现zkclient组件实现方案(Java版)

ZooKeeper Watcher 机制

  1. client 向zookeeper 注册监听
  2. client注册的同时会存储一个WatchManager对象
  3. 向zookeeper发生改变则notification client 并发送一个WatchManager对象,然后client再更新该对象
java 复制代码
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);
    }
}
相关推荐
暮色妖娆丶2 小时前
不过是吃了几年互联网红利罢了,我高估了自己
java·后端·面试
NE_STOP3 小时前
MyBatis-参数处理与查询结果映射
java
狂奔小菜鸡3 小时前
Day40 | Java中的ReadWriteLock读写锁
java·后端·java ee
SimonKing5 小时前
JetBrains 用户狂喜!这个 AI 插件让 IDE 原地进化成「智能编码助手」
java·后端·程序员
狂奔小菜鸡5 小时前
Day39 | Java中更灵活的锁ReentrantLock
java·后端·java ee
NE_STOP17 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
后端AI实验室1 天前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风1 天前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme1 天前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试