zookeeper客户端 API 操作

导读:本篇文章讲解 zookeeper客户端 API 操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,需要您的陪伴。
关注一波,您的关注是我最大的动力。

目录

1.IDEA 环境搭建

2 创建 ZooKeeper 客户端

3.创建子节点

4 获取子节点并监听节点变化

5 判断 Znode 是否存在


前提:保证服务器上 Zookeeper 集群服务端启动。

1.IDEA 环境搭建

1
)创建一个maven工程:
zookeeper
2
)添加
pom
文件
<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <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>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
3
)拷贝
log4j.properties
文件到项目根目录
需要在项目的
src/main/resources
目录下,新建一个文件,命名为“
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
4
)创建包名
com.atguigu.zk
5
)创建类名称
zkClient

zookeeper客户端 API 操作

 

2 创建 ZooKeeper 客户端

    private static String connectString="192.168.23.100:2181,192.168.23.101:2181,192.168.23.102:2181";
    private static int sessionTimeout=200000;
    private static ZooKeeper zooKeeper;

    static {
        try {
            zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {

                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

注意:connectString中逗号前后不能有空格

           sessionTimeout要设置的长点

这里也可以通过以下例子先进行测试连接:

    private static String connectString="192.168.23.100:2181,192.168.23.101:2181,192.168.23.102:2181";
    private static int sessionTimeout=200000;
    private static ZooKeeper zooKeeper;

    @Test
    public void init() throws IOException {
        zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                
            }
        });
    }

若出现以下错误的话:

org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /luyq

有可能是下面几种原因:
1)查看是不是关闭了Linux的防火墙
2)代码中的请求时间,要大于zookeeper里面配置的延迟时间
3)以上还是不同,请在配置一下电脑的host,把ip换成域名来创建访问

3.创建子节点

create函数参数类型:参数 1:要创建的节点的路径; 参数 2:节点数据 ; 参数 3:节点权限 ;

参数
4
:节点的类型
    //创建结点
    @Test
    public void createnode() throws Exception {
        String nodeCreate = zooKeeper.create("/atguigu", "bang".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }
测试:在
hadoop102

zk
客户端上查看创建节点情况
[zk: localhost:2181(CONNECTED) 16] get -s /atguigu
bang

4 获取子节点并监听节点变化

    //查看结点
    @Test
    public void getchilden() throws KeeperException, InterruptedException {
        List<String> children = zooKeeper.getChildren("/", true);
        children.forEach(System.out::println);

        Thread.sleep(Long.MAX_VALUE);
    }

 需要在zookeeper初始化重写的process函数中加入以下代码,为了方便结点变化时的查看加入了辅助虚线:

                @Override
                public void process(WatchedEvent watchedEvent) {
                    System.out.println("-------------------------");
                    List<String> children = null;
                    try {
                        children = zooKeeper.getChildren("/", true);
                        children.forEach(System.out::println);
                    } catch (KeeperException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("-------------------------");
                }


1
)在
IDEA
控制台上看到如下节点:
zookeeper
sanguo
atguigu
(2)在
hadoop102
的客户端上创建再创建一个节点
/atguigu1
,观察
IDEA
控制台
[zk: localhost:2181(CONNECTED) 3] create /atguigu1 "atguigu1"
(3)在
hadoop102
的客户端上删除节点
/atguigu1
,观察
IDEA
控制台
[zk: localhost:2181(CONNECTED) 4] delete /atguigu1

5 判断 Znode 是否存在

    //结点是否存在
    @Test
    public void is_exist() throws KeeperException, InterruptedException {
        Stat exists = zooKeeper.exists("/atguigu", false);
        System.out.println(exists==null?"not exist":"exist");
    }

点赞,关注,收藏,您的支持是我更新的最大动力!!! 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118495.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!