核心类 org.apache.zookeeper.ZooKeeper#ZooKeeper(java.lang.String, int, org.apache.zookeeper.Watcher)
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
@Before
public void init() throws Exception {
zkClient = new ZooKeeper(zkServers, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
log.info("事件类型:{} ,路径:{} ,状态:{} ", watchedEvent.getType(), watchedEvent.getPath(), watchedEvent.getState());
}
});
}
创建znode
核心类 org.apache.zookeeper.ZooKeeper#create(java.lang.String, byte[], java.util.List
public String create(final String path, byte data[], Listacl, CreateMode createMode)
@Test
public void testCreateNode() throws KeeperException, InterruptedException {
zkClient.create("/demo", "demoData".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
获取节点路径信息
核心类org.apache.zookeeper.ZooKeeper#getChildren(java.lang.String, boolean)
public ListgetChildren(String path, boolean watch); public List getChildren(final String path, Watcher watcher);
@Test
public void testWatchNode() throws KeeperException, InterruptedException {
List children = zkClient.getChildren("/demo", true);
log.info(String.join(",", children));
Thread.sleep(600 * 1000);
}
获取节点数据
核心类org.apache.zookeeper.ZooKeeper#getData(java.lang.String, org.apache.zookeeper.Watcher, org.apache.zookeeper.data.Stat)
public byte[] getData(final String path, Watcher watcher, Stat stat)
throws KeeperException, InterruptedException
@Test
public void testGetData() throws KeeperException, InterruptedException {
Stat stat = new Stat();
byte[] data = zkClient.getData("/demo", new Watcher() {
@SneakyThrows
@Override
public void process(WatchedEvent watchedEvent) {
log.info("getData 事件类型:{} ,路径:{} ,状态:{} ", watchedEvent.getType(), watchedEvent.getPath(), watchedEvent.getState());
byte[] changeData = zkClient.getData("/demo", true, null);
log.info("节点变化数据:{}", new String(changeData));
}
}, stat);
log.info("节点数据:{}", new String(data));
Thread.sleep(600 * 1000);
}
查看节点是否存在
核心类org.apache.zookeeper.ZooKeeper#exists(java.lang.String, boolean)
public Stat exists(String path, boolean watch) throws KeeperException; // 重载方法 public Stat exists(final String path, Watcher watcher)
@Test
public void testExist() throws Exception {
Stat exists = zkClient.exists("/demo", false);
log.info(exists.toString());
}
完整代码
@Slf4j
public class ZkClientDemo {
private static String zkServers = "node1:2181";
private static int sessionTimeout = 2000;
private static ZooKeeper zkClient;
@Before
public void init() throws Exception {
zkClient = new ZooKeeper(zkServers, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
log.info("事件类型:{} ,路径:{} ,状态:{} ", watchedEvent.getType(), watchedEvent.getPath(), watchedEvent.getState());
}
});
}
@Test
public void testCreateNode() throws KeeperException, InterruptedException {
zkClient.create("/demo", "demoData".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
@Test
public void testWatchNode() throws KeeperException, InterruptedException {
List children = zkClient.getChildren("/demo", true);
log.info(String.join(",", children));
Thread.sleep(600 * 1000);
}
@Test
public void testGetData() throws KeeperException, InterruptedException {
Stat stat = new Stat();
byte[] data = zkClient.getData("/demo", new Watcher() {
@SneakyThrows
@Override
public void process(WatchedEvent watchedEvent) {
log.info("getData 事件类型:{} ,路径:{} ,状态:{} ", watchedEvent.getType(), watchedEvent.getPath(), watchedEvent.getState());
byte[] changeData = zkClient.getData("/demo", true, null);
log.info("节点变化数据:{}", new String(changeData));
}
}, stat);
log.info("节点数据:{}", new String(data));
Thread.sleep(600 * 1000);
}
@Test
public void testExist() throws Exception {
Stat exists = zkClient.exists("/demo", false);
log.info(exists.toString());
}
}



