原文链接:Zookeeper实战之使用Zookeeper API
前几篇文章介绍了Zookeeper的安装,今天来看看怎样通过Zookeeper的API来操作Zookeeper。
要使用Zookeeper的API,首先需要创建一个ZooKeeper对象来连接ZooKeeper的server。然后可以通过下面的方法来操作znode节点
create: 创建znode节点。
delete: 删除znode节点,这里需要注意就是如果要删除的znode节点有子节点,需要先删除所有子节点。
setData: 修改或设置znode节点的值。
getData: 获取znode节点的值。
exists: 判断一个znode节点是不是存在,返回一个Stat对象。
getChildren: 获取一个节点的子节点。
下面看看具体代码实现
package my.zookeeperstudy;
import org.apache.zookeeper.*;
import java.util.List;
public class Test {
private static final String HOST = "<hostname>";
private static final String PORT = "2181";
public static void main(String[] args) throws Exception {
ZooKeeper zk = new ZooKeeper(HOST + ":" + PORT, 10000,
new Watcher() {
public void process(WatchedEvent event) {
System.out.println("event: " + event.getType());
}
});
System.out.println(zk.getState());
zk.create("/myApps", "myAppsData".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.create("/myApps/App1", "App1Data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.create("/myApps/App2", "App2Data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.create("/myApps/App3", "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.setData("/myApps/App3","App3Data".getBytes(), -1);
System.out.println(zk.exists("/myApps", true));
System.out.println(new String(zk.getData("/myApps", true, null)));
List<String> children = zk.getChildren("/myApps", true);
for (String child : children) {
System.out.println(new String(zk.getData("/myApps/" + child, true, null)));
zk.delete("/myApps/" + child,-1);
}
zk.delete("/myApps",-1);
zk.close();
}
}