文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ZookeeperZkClient使用介绍

2024-04-02 19:55

关注

前言

接下来,还是从创建会话、创建节点、读取数据、更新数据、删除节点等方面来介绍如何使用zkClient 这个zookeeper客户端

添加依赖:

在pom.xml⽂件中添加如下内容

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.2</version>
</dependency>

1、创建会话

使⽤ZkClient可以轻松的创建会话,连接到服务端

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateSession {
    
    public static void main(String[] args) {
        
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        System.out.println("会话被创建了...");
    }
}

2、创建节点

ZkClient提供了递归创建节点的接口,即其帮助开发者先完成父节点的创建,再创建子节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class CreateNote {
    
    public static void main(String[] args) {
        
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        System.out.println("会话被创建了...");
        // 创建节点
        
        zkClient.createPersistent("/lg-zkClient/lg-c1", true);
        System.out.println("节点递归创建完成");
    }
}

值得注意的是,在原生态接口中是无法创建成功的(⽗节点不存在),但是通过ZkClient通过设置createParents参数为true可以递归的先创建父节点,再创建子节点

3、删除节点

ZkClient提供了递归删除节点的接口,即其帮助开发者先删除所有子节点(存在),再删除父节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.ZkClient;
public class DeleteNote {
    
    public static void main(String[] args) {
        
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        System.out.println("会话被创建了...");
        // 递归删除子节点
        String path = "/lg-zkClient/lg-c1";
        zkClient.createPersistent(path+"/c11");
        zkClient.deleteRecursive(path);
        System.out.println("递归删除成功");
    }
}

结果表明ZkClient可直接删除带子节点的⽗节点,因为其底层先删除其所有子节点,然后再删除父节点

4、获取子节点

package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import java.util.List;
public class Get_NoteChildren {
    
    public static void main(String[] args) throws InterruptedException {
        
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        System.out.println("会话被创建了...");
        // 获取子节点列表
        List<String> children = zkClient.getChildren("/lg-zkClient");
        System.out.println(children);
        // 注册监听对象
        
        zkClient.subscribeChildChanges("/lg-zkClient-get", new IZkChildListener() {
            
            @Override
            public void handleChildChange(String parentPath, List<String> list) throws Exception {
                System.out.println(parentPath + "的子节点列表发生了变化,变化后的子节点列表为" + list);
            }
        });
        // 测试
        zkClient.createPersistent("/lg-zkClient-get");
        Thread.sleep(1000);
        zkClient.createPersistent("/lg-zkClient-get/c1");
        Thread.sleep(1000);
    }
}

结果表明:客户端可以对⼀个不存在的节点进行子节点变更的监听。⼀旦客户端对⼀个节点注册了子节点列表变更监听之后,那么当该节点的子节点列表发生变更时,服务端都会通知客户端,并将最新的子节点列表发送给客户端,该节点本身的创建或删除也会通知到客户端。

5、获取数据(节点是否存在、更新、删除)

package com.lagou.zkClient;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
public class Note_API {
    
    public static void main(String[] args) throws InterruptedException {
        
        ZkClient zkClient = new ZkClient("127.0.0.1:2181");
        System.out.println("会话被创建了...");
        // 创建节点
        
        zkClient.createPersistent("/lg-zkClient/lg-c1", true);
        System.out.println("节点递归创建完成");
        // 判断节点是否存在
        String path = "/lg-zkClient-Ep";
        boolean exists = zkClient.exists(path);
        if (!exists) {
            // 创建临时节点
            zkClient.createEphemeral(path, "123");
        }
        // 读取节点内容
        Object o = zkClient.readData(path);
        System.out.println(o);
        // 注册监听
        zkClient.subscribeDataChanges(path, new IZkDataListener() {
            
            @Override
            public void handleDataChange(String s, Object o) throws Exception {
                System.out.println(s + ":该节点内容被更新,更新后的内容:" + o);
            }
            
            @Override
            public void handleDataDeleted(String s) throws Exception {
                System.out.println(s + ":该节点被删除");
            }
        });
        // 更新节点内容
        zkClient.writeData(path, "456");
        Thread.sleep(2000);
        // 删除节点
        zkClient.delete(path);
        Thread.sleep(2000);
    }
}

到此这篇关于Zookeeper ZkClient使用介绍的文章就介绍到这了,更多相关Zookeeper ZkClient内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯