使用zookeeper API实现zookeeper的基本操作

参考了网上的一个例子,现在程序可以跑了,但是由于时间原因,明天再做深入研究。

这里先记下参考的例子及其代码(https://blog.csdn.net/u010398771/article/details/82420504)

package zookeeper;

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 MyZookeeper 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 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();
		}
	}
}
package zookeeper;

import java.util.List;
/**
 * Hello world!
 * 
 */
public class App {
	public static void main(String[] args) throws Exception {
		MyZookeeper zookeeper = new MyZookeeper();
		zookeeper.connectZookeeper("127.0.0.1:2181");
		List<String> children = null;
		children = zookeeper.getChildren("/");
		System.out.println(children);
		zookeeper.closeConnection();
	}
}
发布了101 篇原创文章 · 获赞 546 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/yuan1164345228/article/details/86184494