java操作zookeeper

java操作zookeeper

文档

  1. linux安装java -centos安装java -linux配置java环境变量
  2. zookeeper单机安装
  3. zookeeper集群安装
  4. zookeeper客户端命令行操作、节点类型及监听器
  5. zookeeper集群写数据原理
  6. java操作zookeeper

依赖信息

xml 复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>
<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.5.7</version>
</dependency>

log4j配置文件

在resources下创建log4j.properties文件

properties 复制代码
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/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d   %p  [%c]    -   %m%n

java操作zookeeper参考代码

  • 包括连接zookeeper、创建节点、获取子节点列表、判断节点是否存在、监听等方法
  • 注释中包含注意事项
java 复制代码
package xin.yangshuai.zookeeper01.client;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

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

public class ZkClient {

    private ZooKeeper zkClient;

    // 注意:逗号左右不能有空格
    private String connectString = "192.168.145.132:2181,192.168.145.133:2181,192.168.145.134:2181";
    // 2000毫秒
    private int sessionTimeout = 2000;

    /**
     * 连接zookeeper
     *
     * @throws IOException
     */
    public void init() throws IOException {
        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                // 初始化时,会执行一次
                System.out.println(watchedEvent.getPath() + "-------------");
                try {
                    // 注册一次,监听一次,如果想持续监听,可重新注册
                    // getChildren()方法设置了监听,所以每次调用将重新注册监听
                    getChildren();
                } catch (KeeperException | InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * 创建一个节点
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void create() throws KeeperException, InterruptedException {
        String node = zkClient.create("/client", "create-test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("Created " + node);
    }

    /**
     * 获取子节点
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void getChildren() throws KeeperException, InterruptedException {
        // 参数watch设置为true,表示使用zkClient创建时的Watcher,并监听当前节点的子节点的增删变化
        List<String> children = zkClient.getChildren("/", true);
        for (String child : children) {
            System.out.println("children " + child);
        }
    }

    /**
     * 判断节点是否存在
     *
     * @throws KeeperException
     * @throws InterruptedException
     */
    public void exist() throws KeeperException, InterruptedException {
        Stat stat = zkClient.exists("/client", false);
        System.out.println(stat == null ? "not exist" : "exist");
        stat = zkClient.exists("/client1", false);
        System.out.println(stat == null ? "not exist" : "exist");
    }

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        ZkClient zkClient = new ZkClient();
        zkClient.init();
        zkClient.create();
        // getChildren()方法不用手动调用,zookeeper客户端初始化时,会调用监听器的process方法,可在该方法中调用getChildren()方法
        // zkClient.getChildren();
        zkClient.exist();

        // 保持运行状态,来观察监听器的动作
        Thread.sleep(Long.MAX_VALUE);

        // 可在命令行增删节点 / 的子节点,来触发监听器动作
    }
}

java中的zookeeper节点类型

properties 复制代码
持久无序号节点:CreateMode.PERSISTENT
持久有序号节点:CreateMode.PERSISTENT_SEQUENTIAL
临时无序号节点:CreateMode.EPHEMERAL
临时有序号节点:CreateMode.EPHEMERAL_SEQUENTIAL
相关推荐
爱吃面的猫2 天前
大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)
大数据·分布式·zookeeper
TongSearch11 天前
使用 TongZK 做服务注册与服务发现
zookeeper·服务发现·国产化·东方通·tongzk
AI人工智能+电脑小能手13 天前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
January丶14 天前
docker-compose安装ZooKeeper集群
zookeeper
AI人工智能+电脑小能手14 天前
【大白话说Java面试题 第205题】【09_Zookeeper篇】第6题:ZooKeeper 实现分布式锁的原理
java·zookeeper·分布式锁·并发控制·分布式协调
AI人工智能+电脑小能手15 天前
【大白话说Java面试题 第203题】【09_Zookeeper篇】第4题:ZooKeeper 的节点类型有哪些?
java·zookeeper·分布式锁·分布式协调·znode
顧棟20 天前
Zookeeper热缩容解析
linux·服务器·zookeeper
Benjamin℡22 天前
Zookeeper(一)搭建单体和集群服务以及Zookeeper客户端
分布式·zookeeper·云原生
二宝哥23 天前
ZooKeeper 3.4.13 单机安装详解
zookeeper
良木生香25 天前
【C++初阶】STL—— Stack & Queue 从入门到精通:容器适配器、迭代器与经典面试题
java·开发语言·c++·算法·zookeeper