Zookeeper Java Api的使用
压下载的zookeeper-3.4.10.tar.gz获得zookeeper-3.4.10文件夹,里面的jar是需要用到的依赖包。
打开eclipse,创建一个java工程。
导入相应的jar包。
创建会话
packagezookeeperTest;
importjava.io.IOException;
importorg.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class CreatSession implements Watcher {
private static ZooKeeper zookeeper;
public static void main(String[] args) throws IOException {
zookeeper = new ZooKeeper("10.250.109.123", 5000, new CreatSession());
System.out.println(zookeeper.getState());
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
System.out.println("目前事件"+event);
}
}
运行结果:
同步创建节点:
代码:
packagezookeeperTest;
importjava.io.IOException;
importorg.apache.zookeeper.CreateMode;
importorg.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
importorg.apache.zookeeper.Watcher.Event.KeeperState;
importorg.apache.zookeeper.ZooDefs.Ids;
importorg.apache.zookeeper.ZooKeeper;
public class CreateNode implements Watcher {
private static ZooKeeper zookeeper;
public static void main(String[] args) throws IOException {
zookeeper = new ZooKeeper("10.250.109.123", 5000, new CreatNode());
System.out.println(zookeeper.getState());
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void process(WatchedEvent event) {
if (event.getState() ==KeeperState.SyncConnected) {
NodeCreate();
}
}
private void NodeCreate() {
String path;
try {
path = zookeeper.create("/node_2", "111".getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("return path"+path);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
获取子节点信息:
将
path=zookeeper.create("/node_2","111".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
修改为:
List<String>children =zookeeper.getChildren("/", false);
System.out.println(children);
运行结果
其中参数false为是否监听节点变化
packagezookeeperTest;
importjava.io.IOException;
importjava.util.List;
importorg.apache.zookeeper.KeeperException;
importorg.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
importorg.apache.zookeeper.Watcher.Event.KeeperState;
importorg.apache.zookeeper.ZooKeeper;
public class NewMsg implements Watcher {
private static ZooKeeper zookeeper;
public static void main(String[] args) throws IOException {
zookeeper = new ZooKeeper("10.250.109.123", 5000, new NewMsg());
System.out.println(zookeeper.getState());
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void process(WatchedEvent event) {
if (event.getState() ==KeeperState.SyncConnected) {
if (event.getType() ==EventType.None && null == event.getPath()) {
msg();
} else {
if (event.getType() ==EventType.NodeChildrenChanged)
try {
System.out.println(zookeeper.getChildren(event.getPath(), true));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private void msg() {
try {
List<String> children = zookeeper.getChildren("/", true);
System.out.println(children);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
当我们在客户端创建一个新的节点时,
在控制台会自动输出
运行实验的CreateNode类新建后结果等同。
删除操作:
代码为:
zookeeper.delete("/node_1", -1);
第一个参数为节点路径,第二个参数为版本信息,当设置为-1时表示不检验版本信息。