Zookeeper客户端API操作


前言

前提:保证zookeeper101,zookeeper102,zookeeper103服务器上Zookeeper集群服务端启动。
在这里插入图片描述

一、IDEA环境搭建

1、创建一个maven工程:zookeeper
2、在pom文件添加依赖:
在这里插入图片描述
3、在src/main/resources目录下,新建一个文件,命名为"log4j.properties",在文件中填入:
在这里插入图片描述
在这里插入图片描述
4、创建包名com.xing.zk:
在这里插入图片描述
5、创建类名zkClient:
在这里插入图片描述

二、创建Zookeeper客户端

1、需要服务器地址和连接过期时间,需要监听器后续可以添加:


    private String connectString = "zookeeper101:2181,zookeeper102:2181,zookeeper103:2181";
    private int sessionTimeout = 2000;
    private ZooKeeper zkClient;

    @Before
    public void init() throws IOException {

        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            public void process(WatchedEvent watchedEvent) {

            }
        });

    }

测试连接是否成功:
在这里插入图片描述
可以看到已经连接成功。
2、测试创建节点:

 @Test
    public void create() throws KeeperException, InterruptedException {
        String nodeCreated = zkClient.create("/sanguo", "wuzx".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

“/sanguo”:创建的节点的路径;
“wuzx”.getBytes():节点里面的值,需要转化为字节传输;
“ZooDefs.Ids.OPEN_ACL_UNSAFE”:权限控制,设置访问权限;
CreateMode.PERSISTENT:创建的节点类型,如这个是永久不带序号节点。
目前只有一个zookeeper节点:
在这里插入图片描述
执行上述步骤:
在这里插入图片描述
节点创建成功。
注意:创建节点需要在连接上zookeeper集群才能成功,也就是先连接成功再创建节点。

三、获取子节点并监听节点变化

1、获取子节点:

  @Test
    public void getChildren() throws KeeperException, InterruptedException {

        List<String> children = zkClient.getChildren("/", true);

        for (String child : children){
            System.out.println(child);
        }
        //延时
        Thread.sleep(Long.MAX_VALUE);
    }

true:会使用初始化的监听器,也可以自己new一个监听器。
运行在idea看到如下节点:
在这里插入图片描述
但是监听器只能监听一次,如果再发生变化需要重新注册监听器,要想每次节点发生变化都能检测到并且在控制台打印,就在初始化监听器里面再注册一个监听器,每次监听完又马上注册一个新的监听器。

  @Before
    public void init() throws IOException {

        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            public void process(WatchedEvent watchedEvent) {

                System.out.println("======================");
                List<String> children = null;
                try {
                    children = zkClient.getChildren("/", true);

                    for (String child : children){
                        System.out.println(child);
                    }
                    System.out.println("==================");
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }

四、判断Znode是否存在

@Test
    public void exist() throws KeeperException, InterruptedException {
        Stat stat = zkClient.exists("/sanguo", false);
        System.out.println(stat==null ? "not exists" : "exists");
    }

如果存在则返回exists,想观察服务器存在的节点:
在这里插入图片描述
"/sanguo"节点是存在的,结果应该是exists,观察控制台打印结果:
在这里插入图片描述
确实存在,输入一个不存在的节点并观察控制台打印结果:
在这里插入图片描述

五、遇到的问题

连接不上zookeeper集群的原因:
①linux防火墙未关闭;
解决:
在这里插入图片描述
查看防火墙状态,未关闭需要先关闭。
②地址映射问题;
解决:需要在Windows系统的hosts文件中加入集群中各主机的地址(和linux系统中zookeeper的配置文件zoo.cfg文件一样):
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值