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
相关推荐
唐僧洗头爱飘柔952718 小时前
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
spring cloud·微服务·zookeeper·eureka·服务发现·集群部署·服务注册
new_daimond6 天前
Zookeeper 技术详细介绍
分布式·zookeeper·云原生
Vahala0623-孔勇6 天前
分布式锁巅峰对决:Redis RedLock vs ZooKeeper临时节点——Redission看门狗如何破解续期困局
redis·分布式·zookeeper
伞啊伞8 天前
ZooKeeper与Kafka分布式:从基础原理到集群部署
分布式·zookeeper·kafka
我好饿18 天前
zookeeper+kafka
分布式·zookeeper·kafka
荣光波比10 天前
ZooKeeper与Kafka分布式协调系统实战指南:从基础原理到集群部署
运维·分布式·zookeeper·kafka·云计算
风跟我说过她10 天前
Hadoop HA (高可用) 配置与操作指南
大数据·hadoop·分布式·zookeeper·centos
某zhuan11 天前
云计算实验2——CentOS中zookeeper的安装
zookeeper·centos·云计算
zcz160712782112 天前
从 ZooKeeper 到 ELK:分布式中间件与日志分析系统全解析
分布式·elk·zookeeper
失散1312 天前
分布式专题——15 ZooKeeper特性与节点数据类型详解
java·分布式·zookeeper·云原生·架构