1. 程式人生 > >Zookeeper JavaAPI對節點進行增刪改查(詳細步驟)

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));
	}
	

}