ZkClient操作zookeeper以及监听的使用

参考非常详细的文章:https://blog.csdn.net/t1dmzks/article/details/78440717

demo:链接:https://pan.baidu.com/s/1dWUKYzBe5wBdQFijxX2Oxw 
             提取码:4r2t 


1. 需引入pom


		
			com.101tec
			zkclient
			0.10
		

 2. ZkClient操作zk,不带监听

package com.zk.zkclient.zkclient.demo;

import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;
import org.apache.zookeeper.CreateMode;

import java.util.List;

/**
 * 操作zk,不带监听
 *
 * @author qzt
 */
public class ZkClientTest {

    /** zookeeper地址 */
    private static final String CONNECT_ADDR = "127.0.0.1:2181"; // 集群的话用逗号分隔

    /** session超时时间ms */
    private static final int SESSION_OUTTIME = 10000;

    /**
     * 详细功能请查询ZkClient的API
     * @param args
     */
    public static void main(String[] args) {
        // 连接zk
        ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), SESSION_OUTTIME);

        // 创建持久节点 (CreateMode中有临时节点、顺序节点,和持久节点、顺序节点)
        zkc.create("/zookeeper/ZkClient001", "abc001", CreateMode.PERSISTENT);
        zkc.createPersistent("/temp001");// 创建持久节点不带value

        // 创建临时节点
        zkc.create("/zookeeper/ZkClient002", "abc002", CreateMode.EPHEMERAL);
        zkc.createEphemeral("/temp002");// 创建临时节点不带value

        // 删除 /temp节点
        zkc.delete("/temp001");
        //递归删除/super
        zkc.deleteRecursive("/temp001");

        // 修改节点
        zkc.writeData("/zookeeper/ZkClient001", "新内容");

        // 读取value数据
        zkc.readData("/zookeeper/ZkClient001");
        // 判断节点是否存在
        zkc.exists("/zookeeper/ZkClient001");
        // 读取所有子节点(path)
        List list = zkc.getChildren("/zookeeper");
        for (String path: list) {
            // 获取节点下的value
            zkc.readData("/zookeeper/" + path);
        }

        // 关闭zk,close()临时节点立刻就会删除
        zkc.close();
    }

}

3. ZkClient操作zk,subscribeDataChanges监听内容变化(删除、修改)

package com.zk.zkclient.zkclient.demo;

import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;

/**
 * 操作zk,监听内容变化(删除、修改)
 * @author qzt
 */
public class SubscribeDataChangesWatcherTest {

    /** zookeeper地址 */
    static final String CONNECT_ADDR = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183";
    /** session超时时间 */
    static final int SESSION_OUTTIME = 10000;//ms

    /**
     * 打印结果:
     *  >>监听到变更的节点为:/zookeeper/lock, 变更内容为:321
     *  >>监听到删除的节点为:/zookeeper/lock
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), SESSION_OUTTIME);

        // 创建临时节点 /zookeeper/lock:123
        zkc.createPersistent("/zookeeper/lock", "123");

        //对父节点添加监听子节点变化。
        zkc.subscribeDataChanges("/zookeeper/lock", new IZkDataListener() {
            // 得到删除节点的path
            @Override
            public void handleDataDeleted(String path) throws Exception {
                System.out.println(">>监听到删除的节点为:" + path);
            }

            // 得到变更的节点和变更的内容
            @Override
            public void handleDataChange(String path, Object data) throws Exception {
                System.out.println(">>监听到变更的节点为:" + path + ", 变更内容为:" + data);
            }
        });

        Thread.sleep(3000);
        zkc.writeData("/zookeeper/lock", "321", -1);
        Thread.sleep(1000);

        zkc.delete("/zookeeper/lock");
        Thread.sleep(Integer.MAX_VALUE);
    }

}

4. ZkClient操作zk,subscribeChildChanges监听子节点变化(所有crud操作都会监听)

package com.zk.zkclient.zkclient.demo;

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

import java.util.List;

/**
 * 操作zk,监听子节点变化(所有crud操作都会监听)
 * @author qzt
 */
public class ZkClientWatcherChildTest {

    /** zookeeper地址 */
    static final String CONNECT_ADDR = "127.0.0.1:2181";

    /** session超时时间 */
    static final int SESSION_OUTTIME = 10000;//ms


    public static void main(String[] args) throws Exception {
        ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), SESSION_OUTTIME);

        //对父节点添加监听子节点变化。
        zkc.subscribeChildChanges("/super", new IZkChildListener() {
            @Override
            public void handleChildChange(String parentPath, List currentChilds) throws Exception {
                // 节点
                System.out.println(">>>parentPath: " + parentPath);
                // 子节点
                System.out.println(">>>currentChilds: " + currentChilds);
            }
        });

        Thread.sleep(3000);

        zkc.createPersistent("/super");
        Thread.sleep(1000);

        Thread.sleep(5000);
        zkc.createPersistent("/super" + "/" + "c1", "c1内容");
        Thread.sleep(1000);

        zkc.createPersistent("/super" + "/" + "c2", "c2内容");
        Thread.sleep(1000);

        zkc.delete("/super/c2");
        Thread.sleep(1000);

        zkc.deleteRecursive("/super");
        Thread.sleep(Integer.MAX_VALUE);

    }

}

 

你可能感兴趣的:(微服务领域,zookeeper,zk,zookeeper监听)