张治峰的博客

Zookeeper Java客户端使用

2021-02-08

客户端API常规应用

zookeeper 提供了java与C两种语言的客户端。本文引用的是java客户端。引入最新的maven依赖:

<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
</dependency>

初始化连接

常规的客户端类是 org.apache.zookeeper.ZooKeeper,实例化该类之后将会自动与集群建立连接。

  1. 构造方法
    在这里插入图片描述
  2. 参数说明

| 参数名称 | 类型 | 说明 |
|:—-|:—-|:—-|:—-:|
| connectString | String | 连接串,包括ip+端口 ,集群模式下用逗号隔开 192.168.0.149:2181,192.168.0.150:2181 |
| sessionTimeout | int | 会话超时时间,该值不能超过服务端所设置的 minSessionTimeout 和maxSessionTimeout |
| watcher | Watcher | 会话监听器,服务端事件将会触该监听 |
| sessionId |long | 自定义会话ID |
| sessionPasswd | byte[] | 会话密码 |
| canBeReadOnly |boolean| 该连接是否为只读的 |
| hostProvider | HostProvider | 服务端地址提供者,指示客户端如何选择某个服务来调用,默认采用StaticHostProvider实现 |

创建、查看节点

创建节点

通过org.apache.zookeeper.ZooKeeper#create()即可创建节点

  1. 方法列表在这里插入图片描述

  2. 参数说明

参数名称 类型 说明
path String 节点路径
data byte[] 节点值
acl List 节点权限列表(可设置多组权限)
createMode CreateMode 节点类型
cb StringCallback 异步创建结果回调
ctx Object 异步回调上下文
#### 查看节点
通过org.apache.zookeeper.ZooKeeper#getData()即可查看节点
1. 方法
  1. 参数说明:
参数名称 类型 说明
path String 节点路径
watch boolean 是否添加监听
watcher Watcher 监听处理器
cb DataCallback 异步调用结果回调
ctx Object 异步调用上下文参数

查看子节点

通过org.apache.zookeeper.ZooKeeper#getChildren()即可获取子节点。

  1. 方法
    在这里插入图片描述
  2. 参数说明
参数名称 类型 说明
path String 节点路径
watch boolean 是否添加监听
watcher Watcher 监听处理器
cb Children2Callback 异步回调函数
ctx Object 回调上下文

监听节点

在getData() 与getChildren()两个方法中可分别设置监听数据变化和子节点变化。通过设置watch为true,当前事件触发时会调用zookeeper()构建函数中Watcher.process()方法。也可以添加watcher参数来实现自定义监听。一般采用后者。

注:所有的监听都是一次性的,如果要持续监听需要触发后在添加一次监听。

设置节点ACL权限

ACL包括结构为scheme:id:permission(有关ACL的介绍参照上一篇 zookeeper介绍及基本使用
客户端中由org.apache.zookeeper.data.ACL 类表示,类结构如下:
在这里插入图片描述
在这里插入图片描述
权限位的表示方式通过 数字位移 实现。每个权限位都是一个唯一数字,将其合时通过或运行生成一个全新的数字即可

@InterfaceAudience.Public
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;
}

第三方客户端ZkClient

zkClient 是在zookeeper客户端基础之上封装的,使用上更加友好。主要变化如下:

  • 可以设置持久监听,或删除某个监听
  • 可以插入JAVA对象,自动进行序列化和反序列化
  • 简化了基本的增删改查操作。

具体api 此处不一一介绍了,自行查看吧。maven 依赖:

<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章