/**
*
* @author zhangwei_david
* @version $Id: ZKDemo.java, v 0.1 2015年5月2日 上午9:10:56 zhangwei_david Exp $
*/
public class ZKDemo {
private static CountDownLatch latch = new CountDownLatch(1);
private static ZooKeeper zk = null;
private static String path = "/zk-demo";
/**
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
zk = new ZooKeeper("localhost:2181", 5000, new Watcher() {
public void process(WatchedEvent event) {
if (KeeperState.SyncConnected == event.getState()) {
//如果客户端已经建立连接闭锁减一
latch.countDown();
}
}
});
// 等待zk实例创建完成
latch.await();
// 如果该节点不存在则创建持久化的节点
if (zk.exists(path, true) == null) {
zk.create(path, "".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
//创建临时节点
zk.create(path + "/test", "test".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
// 删除节点
zk.delete(path + "/test", 0);
// 异步创建临时节点
zk.create(path + "/test", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL,
new StringCallback() {
public void processResult(int rc, String path, Object ctx, String name) {
System.out.println("result code=" + rc + ", path=" + path + " context=" + ctx
+ ", name=" + name);
}
}, "Test Context");
TimeUnit.SECONDS.sleep(3);
// 更新数据
zk.setData(path + "/test", "testData".getBytes(), -1);
zk.create(path + "/test2", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
// 获取节点
List<String> znodes = zk.getChildren(path, true);
// 获取所有节点下的数据
Stat stat = new Stat();
for (String str : znodes) {
byte[] data = zk.getData(path + "/" + str, true, stat);
System.out.println("获取节点:" + str + " 的数据是:" + new String(data));
}
}
}