zookeeper API 基础

package com.zookeeper;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

/**
 * @version v1.0
 * @Author: huang*
 * @Date: 2020/12/11*
 */
public class ZookeeperDemo {
    
    
    private static String connectString = "bigdata01:2181,bigdata02:2181,bigdata03:2181";
    private static int sessionTimeout = 2000;
    private ZooKeeper zkClient = null;

    @Before
    public void init() throws Exception {
    
    
        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
    
    
            @Override
            public void process(WatchedEvent watchedEvent) {
    
    

                System.out.println(watchedEvent.getType() + "--" + watchedEvent.getPath());
                System.out.println("连接成功");
                try {
    
    
                    zkClient.getChildren("/", true);
                } catch (Exception e) {
    
    
                    e.printStackTrace();
                }
            }
        });


    }
//创建节点
    @Test
    public void create() throws  Exception{
    
    
        String nodeCreated = zkClient.create("/huang", "lan".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(nodeCreated);
    }

    // 判断znode是否存在
    @Test
    public void exist() throws Exception {
    
    

        Stat stat = zkClient.exists("/atguigu1", false);

        System.out.println(stat == null ? "not exist" : "exist");
    }
//设置节点数据
@Test
    public  void setData() throws Exception{
    
    

          zkClient.setData("/atguigu1","jinlian1".getBytes(),0);
}

 @Test
 //获取节点
    public  void getDate() throws Exception{
    
    
     byte[] zkClientData = zkClient.getData("/atguigu1", null, null
     );
     System.out.println(zkClientData);
 }

    @Test
    public void delete() throws KeeperException, InterruptedException {
    
    
        zkClient.delete("/atguigu/a1", 1);

    }


    @Test
    // 获取指定路径下的所有节点,包括子节点
    public void lsAll() throws Exception {
    
    
        ls("/");
    }
    public void ls(String path) throws Exception {
    
    
        List<String> list = zkClient.getChildren(path, null);
        if (list == null || list.isEmpty()) {
    
    
            return;
        }
        for (String s : list) {
    
    
            if (path.equals("/")) {
    
    
                ls(path + s);
            } else {
    
    
                ls(path + "/" + s);
            }
        }
    }


    @Test
    public void watchChange1() throws Exception {
    
    
        Stat stat = new Stat();
        byte[] data = zkClient.getData("/atguigu", new Watcher() {
    
    
            @Override
            public void process(WatchedEvent event) {
    
    
                if (event.getType() == Event.EventType.NodeDataChanged) {
    
    
                    System.out.println("节点数据改变了!");
                }
            }
        }, stat);
        System.out.println(new String(data));
        Thread.sleep(50000);
    }

    //zookeeper中的监听默认是一次性的。要想永久监听需要自己处理:
    @Test
    public void watchChange2() throws Exception {
    
    
        final Stat stat = new Stat();

        final String path = "/atguigu";
        byte[] data = zkClient.getData(path, new Watcher() {
    
    
            @Override
            public void process(WatchedEvent event) {
    
    
                if (event.getType() == Event.EventType.NodeDataChanged) {
    
    
                    try {
    
    

                        byte[] res = zkClient.getData(path, this,stat);//设置可以反复监听
                        System.out.println("节点数据改变了 " + new String(res));
                    } catch (KeeperException | InterruptedException e) {
    
    
                        e.printStackTrace();
                    }
                }
            }
        }, stat);
        System.out.println(new String(data));
        Thread.sleep(50000);
    }

    //获取节点并监听节点删除

    @Test
    public void watchDelete() throws Exception {
    
    
        String path = "/atuguigu/a3";
        Stat stat = new Stat();


        byte[] data = zkClient.getData(path, new Watcher() {
    
    
            @Override
            public void process(WatchedEvent event) {
    
    
                if (event.getType() == Event.EventType.NodeDeleted) {
    
    
                    System.out.println("节点数据删除了!");
                }
            }
        }, stat);

        System.out.println("****" + new String(data));

        // 延时阻塞
        Thread.sleep(Long.MAX_VALUE);
    }



}

猜你喜欢

转载自blog.csdn.net/qq_43674360/article/details/111195413