文章目录
Apache Curator客户端的使用
常用zk的一些java客户端对比
- zk原生api
- 超时重连,不支持自动,需要手动操作
- Watch注册一次后会失效
- 不支持递归创建节点
- zkclient(更新缓慢)
- Apache curator
- Apache的开源项目
- 解决watcher的注册一次就失效
- Api更加简单易用
- 提供更多解决方案并且实现简单:如分布式锁
- 提供常用的ZooKeeper工具类
客户端 curator 的基本Api
1. Maven中引入相关依赖
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.11</version>
</dependency>
2.创建会话
2.1 使用静态工厂方法创建客户端
RetryPolicy retryPolicy = new RetryNTimes(3,5000);
CuratorFramework client =
CuratorFrameworkFactory.newClient(
zkServerPath
,5000
,10000
,retryPolicy);
-参数:
参数名 | 含义 |
---|---|
connectionString | 服务器列表,格式host1:port1,host2:port2,… |
retryPolicy | 重试策略,内建有四种重试策略,也可以自行实现RetryPolicy接口 |
sessionTimeoutMs | 会话超时时间,单位毫秒,默认60000ms |
connectionTimeoutMs | 连接创建超时时间,单位毫秒,默认60000ms |
namespace | 命名空间 |
2.2 使用Fluent风格创建会话
RetryPolicy retryPolicy = new RetryNTimes(3,5000);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(zkServerPath)
.sessionTimeoutMs(10000)
.connectionTimeoutMs(50000)
.retryPolicy(retryPolicy)
.build();
2.3 使用命名空间namespace创建会话
当客户端指定了独立命名空间为“/base”,那么该客户端对Zookeeper上的数据节点的操作都是基于该目录进行的。
通过设置Chroot可以将客户端应用与Zookeeper服务端的一课子树相对应,在多个应用共用一个Zookeeper集群的场景下,这对于实现不同应用之间的相互隔离十分有意义。
RetryPolicy retryPolicy = new RetryNTimes(3,5000);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(zkServerPath)
.sessionTimeoutMs(10000)
.connectionTimeoutMs(50000)
.retryPolicy(retryPolicy)
.namespace("workspace")