文章目录
1. 引入Maven
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
2. 简单API使用
除了创建实例外,其余接口调用都分为同步调用和异步调用两种
同步调用会阻塞方法且同步调用会直接返回结果
异步调用不会阻塞方法,没有返回结果,返回结果需要实现回调类来处理
异步调用比同步调用多两个参数
- AsyncCallback cb 回调函数
- Object ctx 程序上下文,用户传递使用,zk会把ctx传递给回调函数,不会对其做其他处理
由于同步调用和异步调用的区别较为简单,下方介绍api时进介绍同步调用,可以根据自己的需求来选择异步调用还是同步调用
由于每种方法都有各种重载的情况 我们会介绍所有参数
2.1. 创建客户端实例
ZooKeeper zooKeeper = new ZooKeeper(...);
- connectString 连接串
- sessionTimeout 超时时间
- watcher 连接监听器
- sessionId
- sessionPasswd session密码
- boolean canBeReadOnly 是否可以进入只读模式
在分布式情况下,如果半数以上服务器不可用时,允许客户端进入只读模式,该客户端将只允许进行数据读取不允许数据写入
2.2. 查询操作
很多查询操作都有属性 stat 其为节点的属性存储结构,由于返回值里无法返回Stat,所以这儿的做法是传递一个空对象进去,然后由zookeeper对其进行赋值
watch是一个boolean类型的属性,为true的时候会给他附加一个默认监听器
2.2.1. 查询节点
这里面有个点是 命令里的-R命令 是用递归做的,基本Api是不支持直接出来所有节点的
getChildren
对应命令 ls
- path 节点路径
- watch 是否使用默认监听器
- watcher 监听器
- stat 节点属性
2.2.2. 查询ACL
getACL
- path 节点路径
- stat 节点属性
2.2.2. 查询数据
getData
对应命令 get
- path 节点路径
- watch 是否使用默认监听器
- watcher 监听器
- stat 节点属性
2.2.3. 查询配置
getConfig
- path 节点路径
- watch 是否使用默认监听器
- watcher 监听器
2.2.4. 查询节点是否存在
exists
- path 节点路径
- watch 是否使用默认监听器
- watcher 监听器
2.3. 新建操作
create
对应命令 create
- path 节点路径
- data 数据
- acl acl权限
- 创建模式
- PERSISTENT 持久节点
- PERSISTENT_SEQUENTIAL 持久顺序节点
- EPHEMERAL 临时节点
- EPHEMERAL_SEQUENTIAL 临时顺序节点
- CONTAINER 容器节点
- PERSISTENT_WITH_TTL 会过期的持久节点
- PERSISTENT_SEQUENTIAL_WITH_TTL 会过期的持久顺序节点
- ttl 过期时间
如果创建模式 不是会过期的,那么ttl将不会有效
2.4. 删除操作
2.4.1. 删除node
delete
对应命令delete
- path 节点路径
- version
2.4.2. 删除所有Watch
removeAllWatches
- path 节点路径
- watcherType
- local
2.4.3. 删除Watch
removeWatches
- opCode
- path 节点路径
- watcher
- watcherType
- Children
- Data
- Any
- local
2.5. 修改操作
2.5.1. 设置节点属性
setData
- path 节点路径
- data 数据
- version 版本号
2.5.2. 设置ACL
setData
- path 节点路径
- acl acl
- aclVersion 版本号
2.5.3. 设置配置
internalReconfig
- joiningServers
- leavingServers
- newMembers
- fromConfig
- stat
2.6. 其他操作
2.6.1. 判断节点是否存在
exists
- path 节点路径
- watch 是否使用默认监听
- watcher 监听器
2.6.2. 同步节点
sync
- path 节点路径
3. ACL相关
ACL 由Id 和 perms构成
Id 由 scheme 和 id 构成
public class ACL implements Record {
private int perms;
private org.apache.zookeeper.data.Id id;
public ACL() {
}
public ACL(int perms,org.apache.zookeeper.data.Id id) {
this.perms=perms;
this.id=id;
}
...
}
public class Id implements Record {
private String scheme;
private String id;
public Id() {
}
public Id(String scheme,String id) {
this.scheme=scheme;
this.id=id;
}
...
}
3.1. Id
内置两种
public final Id ANYONE_ID_UNSAFE = new Id("world", "anyone");
public final Id AUTH_IDS = new Id("auth", "");
3.2. perms
权限有以下五种:
- READ
- WRITE
- CREATE
- DELETE
- ADMIN
public interface Perms {
int READ = 1 << 0;
int WRITE = 1 << 1;
int CREATE = 1 << 2;
int DELETE = 1 << 3;
int ADMIN = 1 << 4;
int ALL = READ | WRITE | CREATE | DELETE | ADMIN;
}
如果想设置两种或两种以上 那么可以用 |
连接
Perms.READ|PERMS.WRITE
4. CLI和API的映射关系
序号 | CLI | API |
---|---|---|
1 | addauth | addAuthInfo |
2 | close | close |
3 | config | getConfig |
4 | connect | |
5 | create | create |
6 | delete | delete |
7 | deleteall | delete |
8 | delquota | delete |
9 | get | getData |
10 | getAcl | getACL |
11 | history | |
12 | listquota | getData |
13 | ls | getChildren |
14 | ls2 | getChildren |
15 | printwatches | |
16 | quit | |
17 | reconfig | reconfigure |
18 | redo cmdno | |
19 | removewatches | removeAllWatches |
20 | rmr | delete |
21 | set | setData |
22 | setAcl | setACL |
23 | setquota | create |
24 | stat | exists |
25 | sync | sync |