参考了网上的一个例子,现在程序可以跑了,但是由于时间原因,明天再做深入研究。
这里先记下参考的例子及其代码(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();
}
}