导入依赖
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
复杂方法
package com.zookeeper.simple;
import lombok.SneakyThrows;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class BaseTest {
private static CountDownLatch countDownLatch = new CountDownLatch(1);
static ZooKeeper zooKeeper = null;
private static final String ADDRESS = "10.0.138.224:2181";
public static void main(String[] args) throws Exception {
zooKeeper = new ZooKeeper(ADDRESS, 10000, new Watcher() {
@SneakyThrows
@Override
public void process(WatchedEvent event) {
Event.EventType type = event.getType();
Event.KeeperState state = event.getState();
System.out.println(type);
System.out.println(state);
if (type == Event.EventType.None && state == Event.KeeperState.SyncConnected) {
System.out.println("连接上了");
} else if (type == Event.EventType.NodeCreated && state == Event.KeeperState.SyncConnected) {
System.err.println("子节点数量发生变化" + event.getPath());
try {
List<String> children = zooKeeper.getChildren("/hzx2005", true);
System.err.println(children);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
countDownLatch.countDown();//放行
}
});
countDownLatch.await();
System.out.println("开始执行");
// 创建节点
zooKeeper.exists("/hzx2005",true);
zooKeeper.create("/hzx2005","学不会啊,面试题太难背了".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
// 获取数据
byte[] data = zooKeeper.getData("/hzx2005", true, null);
System.out.println(new String(data));
// 修改数据 最后的版本号的目的是乐观锁,如果忽略乐观锁写-1,否则必须匹配当前数据的版本号
Stat stat = zooKeeper.setData("/hzx2005", "来得及唱歌".getBytes(), -1);
System.out.println(stat);
// 删除
zooKeeper.delete("/hzx2005",-1);
// // 创建子节点
// List<String> children = zooKeeper.getChildren("/hzx2005", true);
// System.out.println(children);
// zooKeeper.create("/hzx2005/day20200917", "饭卡里你发来看".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
//
// for (String child : children) {
// byte[] data = zooKeeper.getData("/sh2005/" + child, true, null);
// System.err.println(new String(data));
// }
// //不允许在父节点不存在的情况下创建子节点
// zooKeeper.create("/dasdasd/dasdasdas/dasdasd", "大叔大婶大所多".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.in.read();
}
}
简单方法
package com.zookeeper.curator;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
public class CuratorTest {
private static final String ADDRESS = "10.0.138.224:2181";
public static void main(String[] args) throws Exception {
CuratorFramework curatorFramework = CuratorFrameworkFactory.builder().connectString(ADDRESS)
.sessionTimeoutMs(10000).retryPolicy(new ExponentialBackoffRetry(1000,5)).build();
curatorFramework.start();
// curatorFramework.create().forPath("/hzx2055","开你车咔嚓".getBytes());
// curatorFramework.create().withMode(CreateMode.EPHEMERAL).forPath("/hzx2055_2","白金卡杯咖啡".getBytes());
//可以选择当父节点不存在的时候一起创建父节点
curatorFramework.create().creatingParentContainersIfNeeded().forPath("/hzx2055/curator1/curator2","女粉是坑你".getBytes());
System.in.read();
}
}
虚拟机中查看
进入容器 [root@localhost zookeeper]# docker-compose up -d
启动容器 docker exec -it zk bash
启动bin下的zkCli.sh
root@b2da928f0e4d:/zookeeper-3.4.14/bin# ./zkCli.sh