本章介绍使在idea环境中使用maven工程进行连接zookeeper,并进行简单的增删查改操作。

一、使用的pom依赖

添加zookeeper依赖,以及进行测试的junit测试依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xiaohui.zk</groupId>
    <artifactId>zkdemo1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

二、添加测试类进行连接、新增、修改、查询等操作

1,进行连接zookeeper,并进行创建一个 /huizi 节点

在创建时参数 ZooDefs.Ids.OPEN_ACL_UNSAFE 表示节点的访问权限,OPEN_ACL_UNSAFE 表示可以被所有的客户端节点访问到。


public class FirstTest {

    @Test
    public void test() throws Exception {
        //1, 创建zk连接
        ZooKeeper zooKeeper = new ZooKeeper("172.18.255.118:2181", 2000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("收到监听:type:"+watchedEvent.getType()+", Path:"+watchedEvent.getPath()+", State:"+watchedEvent.getState());
            }
        });

        //2,创建父节点
        String path = zooKeeper.create("/huizi",
                "nodeValue".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
                CreateMode.PERSISTENT);//四种模式
        System.out.println("路径:"+path);

    }

}

执行结束后可以通过linux客户端工具在安装目录bin下使用 ./zkCli.sh 进入客户端命令控制台  命令 ls / 查看成功创建节点 huizi 。

2,创建子节点代码

package com.xiaohui.zk.test;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class FirstTest {

    @Test
    public void test() throws Exception {
        //1, 创建zk连接
        ZooKeeper zooKeeper = new ZooKeeper("172.18.255.118:2181", 2000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("收到监听:type:"+watchedEvent.getType()+", Path:"+watchedEvent.getPath()+", State:"+watchedEvent.getState());
            }
        });

        //2,创建父节点
//        String path = zooKeeper.create("/huizi",
//                "nodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("路径:"+path);


        //3, 创建子节点
        String childenPath = zooKeeper.create("/huizi/childenNode",
                "childenNodeValue".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
                CreateMode.PERSISTENT);//四种模式
        System.out.println("childenPath路径:"+childenPath);

    }
}

控制台使用 ls /huizi 查看其下面的子节点:

3,打印父节点和子节点中的值

package com.xiaohui.zk.test;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;
import java.io.IOException;
import java.util.List;

public class FirstTest {

    @Test
    public void test() throws Exception {
        //1, 创建zk连接
        ZooKeeper zooKeeper = new ZooKeeper("172.18.255.118:2181", 2000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("收到监听:type:"+watchedEvent.getType()+", Path:"+watchedEvent.getPath()+", State:"+watchedEvent.getState());
            }
        });

        //2,创建父节点
//        String path = zooKeeper.create("/huizi",
//                "nodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("路径:"+path);


        //3, 创建子节点
//        String childenPath = zooKeeper.create("/huizi/childenNode",
//                "childenNodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("childenPath路径:"+childenPath);

        //4, 获取节点中的值(父节点和子节点)
        byte[] value = zooKeeper.getData("/huizi",false,null);
        System.out.println("p:"+new String(value));

        List<String> children = zooKeeper.getChildren("/huizi", false);
        for (String child : children) {
            System.out.println("c:"+child);
        }
    }
}

打印如下:

收到监听:type:None, Path:null, State:SyncConnected
p:nodeValue
c:childenNode

4,修改节点中的值

在set 方法中  最后一个参数 表示版本号,-1 表示可以被所有版本都可以匹配到。

package com.xiaohui.zk.test;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Test;
import java.io.IOException;
import java.util.List;

public class FirstTest {

    @Test
    public void test() throws Exception {
        //1, 创建zk连接
        ZooKeeper zooKeeper = new ZooKeeper("172.18.255.118:2181", 2000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("收到监听:type:"+watchedEvent.getType()+", Path:"+watchedEvent.getPath()+", State:"+watchedEvent.getState());
            }
        });

        //2,创建父节点
//        String path = zooKeeper.create("/huizi",
//                "nodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("路径:"+path);


        //3, 创建子节点
//        String childenPath = zooKeeper.create("/huizi/childenNode",
//                "childenNodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("childenPath路径:"+childenPath);

        //4, 获取节点中的值(父节点和子节点)
//        byte[] value = zooKeeper.getData("/huizi",false,null);
//        System.out.println("p:"+new String(value));
//
//        List<String> children = zooKeeper.getChildren("/huizi", false);
//        for (String child : children) {
//            System.out.println("c:"+child);
//        }

        //5, 修改节点的值
        zooKeeper.setData("/huizi", "newValue".getBytes(), -1);
        byte[] value = zooKeeper.getData("/huizi",false,null);
        System.out.println("data:"+new String(value));
    }
}

5,删除某个节点,并查看其是否存在

package com.xiaohui.zk.test;

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

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

public class FirstTest {


    @Test
    public void test() throws Exception {
        //1, 创建zk连接
        ZooKeeper zooKeeper = new ZooKeeper("172.18.255.118:2181", 2000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                System.out.println("收到监听:type:"+watchedEvent.getType()+", Path:"+watchedEvent.getPath()+", State:"+watchedEvent.getState());
            }
        });

        //2,创建父节点
//        String path = zooKeeper.create("/huizi",
//                "nodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("路径:"+path);


        //3, 创建子节点
//        String childenPath = zooKeeper.create("/huizi/childenNode",
//                "childenNodeValue".getBytes(),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE,  //
//                CreateMode.PERSISTENT);//四种模式
//        System.out.println("childenPath路径:"+childenPath);

        //4, 获取节点中的值(父节点和子节点)
//        byte[] value = zooKeeper.getData("/huizi",false,null);
//        System.out.println("p:"+new String(value));
//
//        List<String> children = zooKeeper.getChildren("/huizi", false);
//        for (String child : children) {
//            System.out.println("c:"+child);
//        }

        //5, 修改节点的值
//        zooKeeper.setData("/huizi", "newValue".getBytes(), -1);
//        byte[] value = zooKeeper.getData("/huizi",false,null);
//        System.out.println("data:"+new String(value));

        //6, 判断某个节点是否存在
        Stat exists = zooKeeper.exists("/huizi/childenNode", false);
        System.out.println(exists);
        //7, 删除节点
        zooKeeper.delete("/huizi/childenNode", -1);
        Stat exists1 = zooKeeper.exists("/huizi/childenNode", false);
        System.out.println(exists1);
    }
}

打印如下:

收到监听:type:None, Path:null, State:SyncConnected
4294967326,4294967326,1596599387683,1596599387683,0,0,0,0,16,0,4294967326

null

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐