Zookeeper客戶端基本操作java實現——創建連接、創建節點、添加修改節點內容、獲取子節點、獲取節點數據、刪除節點

一、引入Zookeeper包,添加pom依賴

		<dependency>
			  <groupId>org.apache.zookeeper</groupId>
			  <artifactId>zookeeper</artifactId>
			  <version>3.3.6</version>
		</dependency>

二、基本操作實現類

package com.xgd.log.common;

import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class BaseZookeeper implements Watcher{

	private ZooKeeper zookeeper;
	private static final int SESSION_TIME_OUT = 2000;
	private CountDownLatch countDownLatch = new CountDownLatch(1);
	@Override
	public void process(WatchedEvent event) {
		
		if (event.getState() == KeeperState.SyncConnected) {
			System.out.println("Watch received event");
			countDownLatch.countDown();
		}
	}
	
	/**連接zookeeper
	 * @param host
	 * @throws Exception
	 */
	public void connectZookeeper(String host) throws Exception{
		zookeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
		countDownLatch.await();
		System.out.println("zookeeper connection success");
	}
	
	/**
	 * 創建節點
	 * @param path
	 * @param data
	 * @throws Exception
	 */
	public String createNode(String path,String data) throws Exception{
		return this.zookeeper.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
	}
	
	/**
	 * 獲取路徑下所有子節點
	 * @param path
	 * @return
	 * @throws KeeperException
	 * @throws InterruptedException
	 */
	public List<String> getChildren(String path) throws KeeperException, InterruptedException{
		List<String> children = zookeeper.getChildren(path, false);
		return children;
	}
	
	/**
	 * 獲取節點上面的數據
	 * @param path
	 * @return
	 * @throws KeeperException
	 * @throws InterruptedException
	 */
	public String getData(String path) throws KeeperException, InterruptedException{
		byte[] data = zookeeper.getData(path, false, null);
		if (data == null) {
			return "";
		}
		return new String(data);
	}
	
	/**
	 * 設置節點信息
	 * @param path
	 * @param data
	 * @return
	 * @throws KeeperException
	 * @throws InterruptedException
	 */
	public Stat setData(String path,String data) throws KeeperException, InterruptedException{
		Stat stat = zookeeper.setData(path, data.getBytes(), -1);
		return stat;
	}
	
	/**
	 * 刪除節點
	 * @param path
	 * @throws InterruptedException
	 * @throws KeeperException
	 */
	public void deleteNode(String path) throws InterruptedException, KeeperException{
		zookeeper.delete(path, -1);
	}
	
	/**
	 * 獲取創建時間
	 * @param path
	 * @return
	 * @throws KeeperException
	 * @throws InterruptedException
	 */
	public String getCTime(String path) throws KeeperException, InterruptedException{
		Stat stat = zookeeper.exists(path, false);
		return DateUtil.longToString(String.valueOf(stat.getCtime()));
	}
	
	/**
	 * 獲取某個路徑下孩子的數量
	 * @param path
	 * @return
	 * @throws KeeperException
	 * @throws InterruptedException
	 */
	public Integer getChildrenNum(String path) throws KeeperException, InterruptedException{
		int childenNum = zookeeper.getChildren(path, false).size();
		return childenNum;
	}
	/**
	 * 關閉連接
	 * @throws InterruptedException
	 */
	public void closeConnection() throws InterruptedException{
		if (zookeeper != null) {
			zookeeper.close();
		}
	}
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章