- zekserver.cmd指定jdk
set JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_144
- 修改配置文件
conf/zoo_sample.cfg重命名为 zoo.cfg
# 心跳检测
tickTime=2000
#leader和follower初始化连接时最长能忍受多少个心跳时间的间隔数
initLimit=10
# leader和follower之间发送消息,请求和应达时间长度,最长不能超过多少个tickTime的时间长度
syncLimit=5
# Zookeeper 保存数据的目录.
dataDir=F:\\zookeeper\\data
# 日志目录
dataDirLog=F:\\zookeeper\\log
# 客户端链接的端口
clientPort=2181
3.客户端链接
zkCli -server 127.0.0.1:2181
客户端可以执行命令
create [-s] [-e] path data acl
-s表示创建顺序节点
-e表示创建临时节点
data 数据
acl 权限
4.客户端代码操作
Znode的创建模式CreateMode有四种,分别是:EPHEMERAL(短暂的znode)、EPHEMERAL_SEQUENTIAL(短暂的顺序znode)、PERSISTENT(持久的znode)和PERSISTENT_SEQUENTIAL(持久的顺序znode)
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 5000, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("已经触发了" + event.getType() + "事件!");
}
});
//认证
//zk.addAuthInfo("digest", "guest:guest123".getBytes());
// 创建一个目录节点 ==>已经触发了 None 事件!
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 创建一个子目录节点
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// testRootData 此处false 不触发事件
System.out.println(new String(zk.getData("/testRootPath", false, null)));
// 取出子目录节点列表 ==>[testChildPathOne] 在节点/testRootPath的getChildren上设置观察
System.out.println(zk.getChildren("/testRootPath", true));
// 修改子目录节点数据 由于上面的修改数据不触发观察 这边不执行事件
zk.setData("/testRootPath/testChildPathOne", "modifyChildDataOne".getBytes(), -1);
// 目录节点状态:[5,5,1281804532336,1281804532336,0,1,0,0,12,1,6]
System.out.println("目录节点状态:[" + zk.exists("/testRootPath", true) + "]");
// 创建另外一个子目录节点 ==>已经触发了 NodeChildrenChanged 事件!
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// testChildDataTwo
System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo", true, null)));
// 删除子目录节点 已经触发了 NodeDeleted 事件!
zk.delete("/testRootPath/testChildPathTwo", -1);
zk.delete("/testRootPath/testChildPathOne", -1);
// 删除父目录节点 已经触发了 NodeDeleted 事件!
zk.delete("/testRootPath", -1);
// 关闭连接
zk.close();
}