Zookeeper JavaAPI对节点进行增删改查(详细步骤)

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

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;
import org.omg.CORBA.PRIVATE_MEMBER;

public class zk01 {
	private static final String connectString = "192.168.40.10:2181";
	private static final int sessionTimeout = 2000;
	static ZooKeeper zkClient = null;
	
	/*
	 *connectString -- host:port[,host:port][basePath] 指定的服务器列表,多个host:port之间用英文逗号分隔。
	 *sessionTimeOut -- 会话超时时间。以毫秒为单位。客户端和服务器端之间的连接通过心跳包进行维系,如果心跳包超过这个指定时间则认为会话超时失效。
	 *watcher -- 监视器。如果为null表示不需要观察者。 
	 */
	@Before
	public void init() throws IOException{
		zkClient = new ZooKeeper(connectString, sessionTimeout,new Watcher() {
			
			@Override
			public void process(WatchedEvent event) {
				//事件处理逻辑
				System.out.println(event.getType()+"---"+event.getPath());
			}
		});
	}
	

	@Test
	public void testCreateNode() throws KeeperException, InterruptedException{	
		//进行增删改查
		
		/*
		 * 第一个参数:节点的路径
		 * 第二个参数:节点存放的数据
		 * 第三个参数:节点的权限
		 * 第四个参数:节点的类型(是暂时的还是持久的)
		 */
		String newNodeString = zkClient.create("/eclipse", "111".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
		System.out.println("----------\n");
	}
	
	//判断该节点是否存在
	@Test
	public void existNode() throws KeeperException, InterruptedException{
		/*
		 * 参数1:节点路径
		 * 参数2:是否需要监视器,若不需要填写“false”
		 */
		Stat exists = zkClient.exists("/a0000000004", false);
		System.out.println(exists==null?"not exists":"exists");
		System.out.println("----------\n");
	}
	
	//获取子节点
	@Test
	public void getChildren() throws KeeperException, InterruptedException{
		/*
		 * 参数1:节点路径
		 * 参数2:是否需要监视器,若不需要填写“false”
		 */
		List<String> children = zkClient.getChildren("/a0000000004", true);
		for(String child:children){
			System.out.println(child);
		}
		System.out.println("----------\n");
	}
	
	//获取节点数据
	@Test
	public void nodeData() throws KeeperException, InterruptedException{
		/*
		 * 参数1:节点路径
		 * 参数2:是否需要监视器,若不需要填写“false”
		 * 参数3:指定数据节点的状态信息:一般填写“null”或者“new stat”
		 */
		byte[] data = zkClient.getData("/a0000000004", false, null);
		System.out.println(new String(data));//因为存放的是byte()类型数据
		System.out.println("----------\n");
	}
	
	//删除节点
	@Test
	public void deleteNode() throws InterruptedException, KeeperException{
		/*
		 * 参数2:version,可以传入-1,表明要基于最新版本进行更新操作
		 */
		zkClient.delete("/eclipse", -1);
		System.out.println("----------\n");
	}
	
	//修改节点数据
	@Test
	public void setNodeData() throws KeeperException, InterruptedException{
		
		byte[] data = zkClient.getData("/a0000000004", false, null);
		System.out.println(new String(data));
		
		zkClient.setData("/a0000000004", "222".getBytes(), -1);
		byte[] data1 = zkClient.getData("/a0000000004", false, null);
		System.out.println(new String(data1));
	}
	

}

猜你喜欢

转载自blog.csdn.net/qq_38709565/article/details/82741461