Zookeeper的Shell 客户端操作和zookeeper java api 代码
- Zookeeper的Shell 客户端操作
- ZooKeeper Java API
- zookeeper选举机制
Zookeeper的Shell 客户端操作
代码语言:javascript复制运行 zkCli.sh –server ip:2181
命令 说明 参数
代码语言:javascript复制create [-s] [-e] path
data acl
创建Znode
-s 指定是顺序节
点
-e 指定是临时节
点
ls path [watch] 列出Path下所有子Znode
get path [watch] 获取Path对应的Znode的数据和属性
ls2 path [watch] 查看Path下所有子Znode以及子
Znode的属性
代码语言:javascript复制set path data
[version]
更新节点 version 数据版本
代码语言:javascript复制delete path
[version]
删除节点, 如果要删除的节点有子 Znode则无法删除 version 数据版本
代码语言:javascript复制rmr path
删除节点, 如果有子Znode则递归删 除
代码语言:javascript复制setquota -n|-b val
path
修改Znode配额
代码语言:javascript复制-n 设置子节点最
大个数
-b 设置节点数据
最大长度
history 列出历史记录
1:创建普通节点
代码语言:javascript复制create /app1 hello
2: 创建顺序节点
代码语言:javascript复制create -s /app3 world
3:创建临时节点
代码语言:javascript复制create -e /tempnode world
4:创建顺序的临时节点
代码语言:javascript复制create -s -e /tempnode2 aaa
5:获取节点数据
代码语言:javascript复制get /app1
6:修改节点数据
代码语言:javascript复制set /app1 xxx
7:删除节点
代码语言:javascript复制delete /app1 删除的节点不能有子节点
rmr /app1 递归删除
ZooKeeper Java API
org.apache.zookeeper.Zookeeper Zookeeper 是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。 org.apache.zookeeper.Watcher Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)。 process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。 基本使用 建立java maven项目,引入maven pom坐标。
代码语言:javascript复制<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
代码语言:javascript复制public static void main(String[] args) throws Exception {
// 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
ZooKeeper zk = new ZooKeeper("node-1:2181,node-2:2181", 30000, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("事件类型为:" event.getType());
System.out.println("事件发生的路径:" event.getPath());
System.out.println("通知状态为:" event.getState());
}
});
zk.create("/myGirls", "性感的".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
zk.close();
更多操作示例
public static void main(String[] args) throws Exception {
// 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
ZooKeeper zk = new ZooKeeper("node-21:2181,node-22:2181", 30000, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("事件类型为:" event.getType());
System.out.println("事件发生的路径:" event.getPath());
System.out.println("通知状态为:" event.getState());
}
});
// 创建一个目录节点
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// 创建一个子目录节点
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath",false,null)));
// 取出子目录节点列表
System.out.println(zk.getChildren("/testRootPath",true));
// 修改子目录节点数据
zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
System.out.println("目录节点状态:[" zk.exists("/testRootPath",true) "]");
// 创建另外一个子目录节点
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
// 删除子目录节点
zk.delete("/testRootPath/testChildPathTwo",-1);
zk.delete("/testRootPath/testChildPathOne",-1);
// 删除父目录节点
zk.delete("/testRootPath",-1);
zk.close();
}