前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5 java操作zookeeper

5 java操作zookeeper

作者头像
用户7630333
发布2023-12-07 18:47:30
1190
发布2023-12-07 18:47:30
举报
文章被收录于专栏:look Java

5 java操作zookeeper

本文使用java操作zookeeper都是在集群环境下进行的 搭建集群文章

  1. 创建一个Maven工程
  2. 添加pom文件
代码语言:javascript
复制
        <dependencies>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.8.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.6.0</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>

在resources下创建log4j.properties

代码语言:javascript
复制
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/zk.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

1 创建ZooKeeper客户端

一定要仔细比对集群的ip

代码语言:javascript
复制
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class TestZk {
    // 集群ip
    private String connectString = "192.168.77.128,192.168.77.129,192.168.77.130";
    // session超时时间 60s
    private Integer sessionTimeout = 60 * 1000;

    ZooKeeper zkClient;
    // 连接集群
    @Before
    public void init() throws IOException {
        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {// 监听器
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println("监听到了");
            }
        });
    }
}

出现绿色说明连接成功了

创建节点

  • 一个ACL对象就是一个Id和permission对
    • 表示哪个/哪些范围的Id(Who)在通过了怎样的鉴权(How)之后,就允许进行那些操作 (What):Who How What;
    • permission(What)就是一个int表示的位码,每一位代表一个对应操作的允许状态。
    • 类似linux的文件权限,不同的是共有5种操作:CREATE、READ、WRITE、DELETE、 ADMIN(对应更改ACL的权限) - OPEN_ACL_UNSAFE:创建开放节点,允许任意操作 (用的最少,其余的权限用的很 少) - READ_ACL_UNSAFE:创建只读节点 - CREATOR_ALL_ACL:创建者才有全部权限
代码语言:javascript
复制
@Before
public void init() throws IOException{
// 省略...
}
    // 创建节点
    @Test
    public void createNode() throws InterruptedException, KeeperException {
        String node = zkClient.create(
                "/look", 
                "你好Look".getBytes(), 
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT);
        // 参数1:要创建的节点的路径
		// 参数2:节点数据
		// 参数3:节点权限
		// 参数4:节点的类型
        System.out.println("node = " + node);
    }

查询节点的值

代码语言:javascript
复制
    // 获取节点值
    @Test
    public void getNodeData() throws InterruptedException, KeeperException {
        byte[] clientData = zkClient.getData("/look", false, new Stat());
        System.out.println("clientData = " + new String(clientData));
    }

修改节点的值

代码语言:javascript
复制
    // 修改节点值
    @Test
    public void updateNodeData() throws InterruptedException, KeeperException {
        Stat stat = zkClient.setData("/look", "你好 架构师".getBytes(), 0);
        System.out.println("stat = " + stat);
    }

删除节点

代码语言:javascript
复制
    // 删除节点
    @Test
    public void deleteNodeData() throws InterruptedException, KeeperException {
        zkClient.delete("/look", 1);
        System.out.println("删除成功!");
    }

获取子节点

代码语言:javascript
复制
 获取子节点    // 获取子节点
    @Test
    public void getChildren() throws InterruptedException, KeeperException {
        List<String> children = zkClient.getChildren("/china", false);// false:不监听
        children.forEach(System.out::println);
    }

监听子节点的变化

代码语言:javascript
复制
    // 监听子节点的变化
    @Test
    public void getChildren1() throws Exception {
        List<String> children = zkClient.getChildren("/", true);// true:注册监听
        children.forEach(System.out::println);
        // 让线程不停止,等待监听的响应
        System.in.read();
    }
  • 程序在运行的过程中,我们在linux下创建一个节点
  • IDEA的控制台就会做出响应:NodeChildrenChanged--/

判断Znode是否存在

代码语言:javascript
复制
    // 判断Znode是否存在
    @Test
    public void exist() throws Exception {
        Stat stat = zkClient.exists("/look-word", false);
        System.out.println(stat == null ? "不存在" : "存在");
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5 java操作zookeeper
    • 1 创建ZooKeeper客户端
      • 创建节点
      • 查询节点的值
      • 修改节点的值
      • 删除节点
      • 获取子节点
      • 监听子节点的变化
      • 判断Znode是否存在
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档