zookeeper代码实现常用命令 - 雨中散步撒哈拉

本文详细介绍了如何在Java项目中集成Zookeeper,包括添加依赖、配置日志、创建连接、创建节点、监听节点变化、检查节点存在性。通过实例代码展示了Zookeeper的基本操作,并提供了完整的测试用例。同时,文章末尾还分享了相关技术电子书的领取方式。
摘要由CSDN通过智能技术生成

一、创建项目 1. 添加依赖包,pom文件如下 2. 配置日志文件二、代码实现zk命令 0. 创建连接 2. 创建节点 3. 监听节点变化 4. 判断节点是否存在 5. 测试完整代码

作者:雨中散步撒哈拉
来源:https://liudongdong.top
公众号:雨中散步撒哈拉
备注:欢迎关注公众号,学习技术,一起成长!

文末福利:上百本电子书,等待你的领取v

环境说明:

  1. 服务器为centos7集群

  2. zk为zookeeper-3.4.10.tar.gz版本

  3. jdk为1.8

一、创建项目

1. 添加依赖包,pom文件如下

<dependencies>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<!--
https://mvnrepository.com/artifact/org.apache.zookeeper/zook
eeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.10</version>
</dependency>
</dependencies>

2. 配置日志文件

资源文件创建日志配置文件log4j.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

二、代码实现zk命令

0. 创建连接

连接集群ip和对外端口2181,集群映射,已在windows做了配置
hosts文件内容:

图片

代码实现连接:

private static final String IPS = "master:2181,slave1:2181,slave2:2181";
private static final int SESSIONTIMEOUT = 200;
private ZooKeeper zkClient = null;

@Test
public void contectTest() throws Exception{
    zkClient = new ZooKeeper(IPS, SESSIONTIMEOUT, new Watcher() {
        @Override
        public void process(WatchedEvent event) {

        }
    });

    System.out.println("==================");
    System.out.println(zkClient.getState());
    System.out.println("==================");
}

运行打印结果

图片

image.png

2. 创建节点

创建/idea节点,类型为临时节点

private static final String IPS = "master:2181,slave1:2181,slave2:2181";
private static final int SESSIONTIMEOUT = 200;
private ZooKeeper zkClient = null;

@Before
public void contectTest() throws Exception{
    zkClient = new ZooKeeper(IPS, SESSIONTIMEOUT, new Watcher() {
        @Override
        public void process(WatchedEvent event) {

        }
    });

    System.out.println("==================");
    System.out.println(zkClient.getState());
    System.out.println("==================");
}

@Test
public void createTest() throws Exception{
    String s = zkClient.create("/idea", "helloworld".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
    System.out.println(s);
}

打印结果

图片

image.png

3. 监听节点变化

监控根节点下的子节点变化

private static final String IPS = "master:2181,slave1:2181,slave2:2181";
private static final int SESSIONTIMEOUT = 200;
private ZooKeeper zkClient = null;

@Before
public void contectTest() throws Exception{
    zkClient = new ZooKeeper(IPS, SESSIONTIMEOUT, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            System.out.println(event.getType() + "--" + event.getPath());
            try {
                zkClient.getChildren("/", true);
            } catch (KeeperException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

    System.out.println("==================");
    System.out.println(zkClient.getState());
    System.out.println("==================");
}


@Test
public void childrenTest() throws Exception{
    List<String> children = zkClient.getChildren("/", true);
    for (String ch : children){
        System.out.println(ch);
    }
    Thread.sleep(Long.MAX_VALUE);
}

在xshell模范添加节点,也可以在代码中模仿添加节点

[zk: localhost:2181(CONNECTED) 0] create -e /java "java"
Created /java
[zk: localhost:2181(CONNECTED) 1] create -e /python "java"
Created /python

打印结果

图片

image.png

4. 判断节点是否存在

private static final String IPS = "master:2181,slave1:2181,slave2:2181";
private static final int SESSIONTIMEOUT = 200;
private ZooKeeper zkClient = null;

@Before
public void contectTest() throws Exception{
    zkClient = new ZooKeeper(IPS, SESSIONTIMEOUT, new Watcher() {
        @Override
        public void process(WatchedEvent event) {

        }
    });

    System.out.println("==================");
    System.out.println(zkClient.getState());
    System.out.println("==================");
}

@Test
public void exTest() throws Exception{
    Stat exists = zkClient.exists("/test", false);
    System.out.println(exists == null ? "no" : "yes");

}

打印结果

图片

image.png

5. 测试完整代码

package com.example.demo;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class ZKDemo {

    private static final String IPS = "master:2181,slave1:2181,slave2:2181";
    private static final int SESSIONTIMEOUT = 200;
    private ZooKeeper zkClient = null;

    @Before
    public void contectTest() throws Exception{
        zkClient = new ZooKeeper(IPS, SESSIONTIMEOUT, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                /*System.out.println(event.getType() + "--" + event.getPath());
                try {
                    zkClient.getChildren("/", true);
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }*/
            }
        });

        System.out.println("==================");
        System.out.println(zkClient.getState());
        System.out.println("==================");
    }

    @Test
    public void createTest() throws Exception{
        String s = zkClient.create("/idea", "helloworld".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.println(s);
    }

    @Test
    public void childrenTest() throws Exception{
        List<String> children = zkClient.getChildren("/", true);
        for (String ch : children){
            System.out.println(ch);
        }
        Thread.sleep(Long.MAX_VALUE);
    }

    @Test
    public void exTest() throws Exception{
        Stat exists = zkClient.exists("/test", false);
        System.out.println(exists == null ? "no" : "yes");

    }


}

文末福利

包含c、c++、java、python、linux、html、php等上百本电子书!

图片

图片

图片

获取方式:

搜索并关注公众号:雨中散步撒哈拉

回复关键词:001

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值