阅读 68

Zookeeper的原生api操作

pom文件引入


    
        org.apache.zookeeper
        zookeeper
        3.4.14
    

几个状态和概念
节点创建的权限信息ACL 参数的类型

  • ANYONE_ID_UNSAFE : 表示任何?
  • AUTH_IDS :此ID仅可?于设置ACL。它将被客户机验证的ID替换。
  • OPEN_ACL_UNSAFE :这是?个完全开放的ACL(常?)-->world:anyone
  • CREATOR_ALL_ACL :此ACL授予创建者身份验证ID的所有权限
    节点的几种类型的枚举
  • PERSISTENT:持久节点
  • PERSISTENT_SEQUENTIAL:持久顺序节点
  • EPHEMERAL:临时节点
  • EPHEMERAL_SEQUENTIAL:临时顺序节点

zookeeper原生api创建会话操作

public class CreateSession implements Watcher {
    private static CountDownLatch countDownLatch = new CountDownLatch(1);

    public static void main(String[] args) throws IOException, InterruptedException {
        ZooKeeper zooKeeper = new ZooKeeper("119.45.52.68:2181",6000,new CreateSession());
        System.out.println(zooKeeper.getState());
        countDownLatch.await();
        System.out.println("zk session  create success");

    }
    @Override
    public void process(WatchedEvent watchedEvent) {
        if (watchedEvent.getState()==Event.KeeperState.SyncConnected){
            countDownLatch.countDown();
        }
    }
}

正常创建回话

zookeeper原生api获取信息操作

public class getNoetNode implements Watcher {

    private  static ZooKeeper zooKeeper;

    public static void main(String[] args) throws InterruptedException, IOException {
        zooKeeper = new ZooKeeper("119.45.52.68:2181",10000,new getNoetNode());
        //countDownLatch.await();
        Thread.sleep(Integer.MAX_VALUE);
    }

    @Override
    public void process(WatchedEvent event) {
        if(event.getType() ==Event.EventType.NodeChildrenChanged){
//再次获取子节点数据,监听子节点变化
            try {
                List children =
                        zooKeeper.getChildren(event.getPath(), true);
                System.out.println(children);
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        //当连接创建了,服务端发送给客户端SyncConnected事件
        if(event.getState() == Event.KeeperState.SyncConnected){
            try {
//调?获取单个节点数据?法
                getNodeData();
                getChildren();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println();
    }

    private static void getNodeData() throws Exception {
        byte[] data = zooKeeper.getData("/persistent/children", true,
                null);
        System.out.println(new String(data,"utf-8"));
    }

    public static  void getChildren() throws Exception{
        List childrens = zooKeeper.getChildren("persistent",true);
        System.out.println(childrens);

    }
}

zookeeper原生api更新节点信息

public class UpdateNode implements Watcher {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) throws Exception{
        zooKeeper = new ZooKeeper("119.45.52.68:2181",6000,new UpdateNode());
        Thread.sleep(Integer.MAX_VALUE);

    }
    @Override
    public void process(WatchedEvent event) {
        try {
            byte[] before = zooKeeper.getData("/persistent/children",false,null);
            System.out.println("修改前的值"+new String(before));
           Stat stat = zooKeeper.setData("/persistent","客户端修改的内容".getBytes(),-1);
            System.out.println(stat);
            byte[] after = zooKeeper.getData("/persistent/children",false,null);
            System.out.println("修改后的值"+new String(after));
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

zookeeper原生api删除节点信息

public class DeleteNode implements Watcher {
    private static  ZooKeeper zooKeeper;
    public static void main(String[] args) throws  Exception{
        zooKeeper = new ZooKeeper("119.45.52.68:2181",6000,new UpdateNode());
        Thread.sleep(Integer.MAX_VALUE);
    }
    @Override
    public void process(WatchedEvent event) {
        try {
            Stat exists = zooKeeper.exists("/persistent/children", false);
            System.out.println(exists == null ? "该节点不存在":"该节点存在");
            zooKeeper.delete("/persistent/children",-1);
            Stat exists2 = zooKeeper.exists("/persistent/children", false);
            System.out.println(exists2 == null ? "该节点不存在":"该节点存在");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

代码地址为https://github.com/zhendiao/deme-code/tree/main/zk

欢迎搜索关注本人与朋友共同开发的微信面经小程序【大厂面试助手】和公众号【微瞰技术】,以及总结的分类面试题https://github.com/zhendiao/JavaInterview


原文:https://www.cnblogs.com/zhendiao/p/14925226.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐