Zookeeper Java Api

1、原生

maven依赖

<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.9</version>
</dependency>

主类为 org.apache.zookeeper.ZooKeeperMain
节点创建 org.apache.zookeeper.CreateMode

2、ZkClient

ZkClient是由Datameer的工程师开发的开源客户端,对Zookeeper的原生API进行了包装,实现了超时重连、Watcher反复注册等功能。
github源代码地址:https://github.com/sgroschupf/zkclient

2.1 maven依赖

<dependency>
     <groupId>org.apache.zookeeper</groupId>
     <artifactId>zookeeper</artifactId>
     <version>3.4.9</version>
 </dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

2.2 构造器

public ZkClient(String serverstring)
public ZkClient(String zkServers, int connectionTimeout)
public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout)
public ZkClient(String zkServers, int sessionTimeout, int connectionTimeout, ZkSerializer zkSerializer)
public ZkClient(final String zkServers, final int sessionTimeout, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)
public ZkClient(IZkConnection connection)
public ZkClient(IZkConnection connection, int connectionTimeout)
public ZkClient(IZkConnection zkConnection, int connectionTimeout, ZkSerializer zkSerializer)
public ZkClient(final IZkConnection zkConnection, final int connectionTimeout, final ZkSerializer zkSerializer, final long operationRetryTimeout)

2.3 常用API

创建节点

public void createPersistent(String path)
public void createPersistent(String path, boolean createParents)
public void createPersistent(String path, boolean createParents, List<ACL> acl)
public void createPersistent(String path, Object data)
public void createPersistent(String path, Object data, List<ACL> acl)
public String createPersistentSequential(String path, Object data)
public String createPersistentSequential(String path, Object data, List<ACL> acl) 
public void createEphemeral(final String path)
public void createEphemeral(final String path, final List<ACL> acl)
public String create(final String path, Object data, final CreateMode mode)
public String create(final String path, Object data, final List<ACL> acl, final CreateMode mode) 
public void createEphemeral(final String path, final Object data)
public void createEphemeral(final String path, final Object data, final List<ACL> acl)
public String createEphemeralSequential(final String path, final Object data)
public String createEphemeralSequential(final String path, final Object data, final List<ACL> acl)

删除节点

public boolean delete(final String path)
public boolean delete(final String path, final int version)
public boolean deleteRecursive(String path)

读取列表

public List<String> getChildren(String path)

获取节点内容

public <T extends Object> T readData(String path)
public <T extends Object> T readData(String path, boolean returnNullIfPathNotExists)
public <T extends Object> T readData(String path, Stat stat)

更新内容

public void writeData(String path, Object object)
public void writeData(final String path, Object datat, final int expectedVersion)
public Stat writeDataReturnStat(final String path, Object datat, final int expectedVersion)

监测节点是否存在

protected boolean exists(final String path, final boolean watch)

注册监听

接口类注册监听方法接触监听方法
IZkChildListenerZkClient的subscribeChildChanges方法ZkClient的unsubscribeChildChanges方法
IZkDataListenerZkClient的subscribeDataChanges方法ZkClient的subscribeChildChanges方法
IZkStateListenerZkClient的subscribeStateChanges方法ZkClient的unsubscribeStateChanges方法

其中ZkClient还提供了一个unsubscribeAll方法,来解除所有的监听。

3、Curator

Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,与 Zookeeper 提供的原生客户端相比,Curator 的抽象层次更高,简化了 Zookeeper 客户端的开发量。现在已是 apache 的顶级开源框架,Fluent 编程风格的实现。
官网:http://curator.apache.org

3.1 maven 依赖

#包含基础框架
 	<dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-client</artifactId>
      <version>4.0.0</version>
    </dependency>
#包含功能性 jar 、分布式锁、队列等
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-recipes</artifactId>
      <version>4.0.0</version>
    </dependency>
#包含客户端重试策略
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.0.0</version>
    </dependency>

3.2 用法

Curator 框架提供了一种流式接口,通过 builder 串起来,传递参数都是调方法。通过 CuratorFrameworkFactory 以工厂模式和 builder 模式创建 CuratorFramework 实例。 CuratorFramework 实例都是线程安全的,可以在应用中共享同一个。工厂方法 newClient()提供了一个简单方式创建实例。,而 Builder 提供了更多的参数控制。一旦创建了一个 CuratorFramework 实例,就必须调用它的 start()启动,在应用退出时调用 close()方法进行关闭。

实例:
一个 Zookeeper 集群只需要构造一个 CuratorFramework 实例对象即可

String address = "localhost:2181";
CuratorFramework client = CuratorFrameworkFactory.newClient(address, new ExponentialBackoffRetry(1000, 3));//重试机制
client.start();

3.3 CuratorFramework 提供的方法

方法名描述
create开始创建操作,可以调用额外的方法(比如方式 mode 或者后台执行background) 并在最后调用 forPath()指定要操作的 ZNode
Delete开始删除操作,可以调用额外的方法(版本或者后台处理 version background)并在最后调用 forPath()指定要操作的 ZNode
checkExists开始检查 ZNode 是否存在的操作.,可以调用额外的方法(监控或者后台处理)并在最后调用 forPath()指定要操作的 ZNode
getData开始获得 ZNode 节点数据的操作,可以调用额外的方法(监控、后台处理或者获取状态 watch, background or get stat),并在最后调用 forPath()指定要操作的 ZNode
setData开始设置 ZNode 节点数据的操作. 可以调用额外的方法(版本或者后台处理) 并在最后调用 forPath()指定要操作的 ZNode
getChildren开始获得 ZNode 的子节点列表,以调用额外的方法(监控、后台处理或者获取状态 watch, background or get stat) 并在最后调用 forPath()指定要操作的 ZNode
inTransaction开始是原子 ZooKeeper 事务. 可以复合 create, setData, check, and/or delete 等操作然后调用 commit()作为一个原子操作提交

3.4 事件类型以及事件的方法

Event TypeEvent Methods
CREATEgetResultCode() and getPath()
DELETEgetResultCode() and getPath()
EXISTSgetResultCode(), getPath() and getStat()
GETDATAgetResultCode(), getPath(), getStat() and getData()
SETDATAgetResultCode(), getPath() and getStat()
CHILDRENgetResultCode(), getPath(),getStat(),getChildren()
WATCHEDgetWatchedEvent

3.5 监听器

Curator 提供了三种 Watcher(Cache)来监听节点的变化:

Path Cache:监视一个路径下子结点的创建、删除,以及结点数据的更新。产生的事件会传递给注册的 PathChildrenCacheListener。

Node Cache:监视一个结点的创建、更新、删除,并将结点的数据缓存在本地。

Tree Cache:Path Cache 和 Node Cache 的“合体”,监视路径下的创建、更新、删除事件,并缓存路径下所有子结点的数据。

3.6 重试机制

Curator 内部实现的几种重试策略:

ExponentialBackoffRetry:重试指定的次数, 且每一次重试之间停顿的时间逐渐增加.

RetryNTimes:指定最大重试次数的重试策略

RetryOneTime:仅重试一次

RetryUntilElapsed:一直重试直到达到规定的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值