zookeeper API 基础
  TEZNKK3IfmPf 2023年11月13日 20 0
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);
    }



}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: MySQL用户管理 下一篇: linux yum和rpm介绍
  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   63   0   0 javaAPI
  TEZNKK3IfmPf   2024年05月17日   27   0   0 API
  TEZNKK3IfmPf   2023年11月14日   24   0   0 接口API
  TEZNKK3IfmPf   2023年11月14日   20   0   0 k8sAPIpython
  TEZNKK3IfmPf   2023年11月15日   53   0   0 API
TEZNKK3IfmPf