ZkClient API 增删改查

一、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";
}

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/90085527