文章目录
一、zkclient 增删改查
1.0、前提
学习本篇文章前提,需要学会zookeeper的环境搭建,熟悉 zookeeper 原生 API 的基本使用。
1.1、依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.1.0</version>
</dependency>
1.2、连接
@Before
public void before() {
zkc = new ZkClient(new ZkConnection(CommonsUtils.CONNECT_ADDR), 5000);
System.out.println("ZK 连接成功");
}
参数说明:
- 第1个参数 CommonsUtils.CONNECT_ADDR ,zk的地址
- 第2个参数 5000 是 超时时间。
ZkClient 连接采用的是“同步连接”,区别与zookeeper的异步连接。
1.3、创建节点
@Test
public void test1() {
zkc.createEphemeral("/temp"); // 创建临时节点
zkc.createPersistent("/super/c1", true);// 递归创建持久化节点。第2个参数表示是否创建父节点
//创建节点时,并赋值
zkc.createEphemeral("/temp2/c1", "c1内容");// 创建临时节点
zkc.createPersistent("/super2", "1234");// 创建临时节点
}
1.4、创建顺序节点,并赋值
@Test
public void test1() {
zkc.createEphemeralSequential("/temp3", "1234"); // 创建临时顺序节点
zkc.createPersistentSequential("/super3", "1234");// 创建持久化顺序节点
}
1.5、删除节点、级联删除
@Test
public void test2_2() {
boolean b1 = zkc.delete("/temp");
System.out.println("b1 = " + b1);
boolean b2 = zkc.deleteRecursive("/super"); // 级联删除
System.out.println("b2 = " + b2);
}
1.6、读取子节点和每个节点的内容
/**
* 读取子节点和每个节点的内容
*/
@Test
public void test3_2() {
String path = "/super";
String data0 = zkc.readData(path);
System.out.println("data0 = " + data0);
List<String> list = zkc.getChildren(path);
for (String p : list) {
System.out.println(p);
String rp = "/super/" + p;
String data = zkc.readData(rp);
System.out.println("节点为:" + rp + ",内容为: " + data);
}
}
1.7、更新和判断节点是否存在
@Test
public void test4() {
zkc.writeData("/super/c1", "新内容xxxx");
System.out.println(zkc.readData("/super/c1"));
System.out.println(zkc.exists("/super/c1"));
}
1.8、递归删除/super内容
@Test
public void test5() {
// 4.递归删除/super内容
boolean deleteRecursive = zkc.deleteRecursive("/super");
System.out.println("deleteRecursive = " + deleteRecursive);
}
二、附录:zkclient 示例代码
package com.aop8.zkclient.base;
import java.util.List;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.aop8.CommonsUtils;
public class ZkClientBase_junit {
/** session超时时间 */
static final int SESSION_OUTTIME = 5000;// ms
ZkClient zkc = null;
@Before
public void before() {
zkc = new ZkClient(new ZkConnection(CommonsUtils.CONNECT_ADDR), 5000);
System.out.println("ZK 连接成功");
}
@After
public void after() {
zkc.close();
}
/**
* 创建节点、递归创建节点
*/
@Test
public void test1() {
zkc.createEphemeral("/temp");// 创建临时节点
zkc.createPersistent("/super/c1", true);// 递归创建持久化节点。第2个参数表示是否创建父节点
}
/**
* 删除节点、级联删除
*/
@Test
public void test2() {
boolean b1 = zkc.delete("/temp");
System.out.println("b1 = " + b1);
boolean b2 = zkc.deleteRecursive("/super"); // 递归删除
System.out.println("b2 = " + b2);
}
/**
* 创建节点,并赋值
*/
@Test
public void test3() {
zkc.createPersistent("/super", "1234");
zkc.createPersistent("/super/c1", "c1内容");
zkc.createPersistent("/super/c2", "c2内容");
}
/**
* 读取子节点和每个节点的内容
*/
@Test
public void test3_2() {
String path = "/super";
String data0 = zkc.readData(path);
System.out.println("data0 = " + data0);
List<String> list = zkc.getChildren(path);
for (String p : list) {
System.out.println(p);
String rp = "/super/" + p;
String data = zkc.readData(rp);
System.out.println("节点为:" + rp + ",内容为: " + data);
}
}
/**
* 3. 更新和判断节点是否存在
*/
@Test
public void test4() {
zkc.writeData("/super/c1", "新内容xxxx");
System.out.println(zkc.readData("/super/c1"));
System.out.println(zkc.exists("/super/c1"));
}
/**
* 4.递归删除/super内容
*/
@Test
public void test5() {
// 4.递归删除/super内容
boolean deleteRecursive = zkc.deleteRecursive("/super");
System.out.println("deleteRecursive = " + deleteRecursive);
}
}
public class CommonsUtils {
/** zookeeper地址 */
//static final String CONNECT_ADDR = "192.168.1.171:2181,192.168.1.172:2181,192.168.1.173:2181";
public static final String CONNECT_ADDR = "127.0.0.1:2181";
}