Apache Curator Utilities

Curator提供了一组工具类和方法用来测试基于Curator的应用。 并且提供了操作ZNode辅助类以及其它一些数据结构

Test Server

curator-test提供了TestingServer类。 这个类创建了一个本地的, 同进程的ZooKeeper服务器用来测试。

Test Cluster

curator-test提供了TestingCluster类。 这个类创建了一个内部的ZooKeeper集群用来测试。

ZKPaths

提供了各种静态方法来操作ZNode:

  • getNodeFromPath: 从一个全路径中得到节点名, 比如 "/one/two/three" 返回 "three"
  • mkdirs: 确保所有的节点都已被创建
  • getSortedChildren: 得到一个给定路径的子节点, 按照sequence number排序
  • makePath: 给定父路径和子节点,创建一个全路径

EnsurePath

确保一个特定的路径被创建。当它第一次使用时,一个同步ZKPaths.mkdirs(ZooKeeper, String)调用被触发来确保完整的路径都已经被创建。后续的调用将不是同步操作.
用法:

1
2
3
4
5
6
7
8
EnsurePath ensurePath = new EnsurePath(aFullPathToEnsure);
...
String nodePath = aFullPathToEnsure + "/foo";
ensurePath.ensure(zk); // first time syncs and creates if needed
zk.create(nodePath, ...);
...
ensurePath.ensure(zk); // subsequent times are NOPs
zk.create(nodePath, ...);

注意: 此方法namespace会参与路径名字的创建。

BlockingQueueConsumer

请参看DistributedQueueDistributedPriorityQueue

提供JDK BlockingQueue类似的行为。

QueueSharder

由于zookeeper传输层的限制, 单一的队列如果超过10K的元素会被分割(break)。 这个类为多个分布式队列提供了一个facade。 它监控队列, 如果一个队列超过这个阈值, 一个新的队列就被创建。 在这些队列中Put是分布式的。

Reaper and ChildReaper

Reaper
可以用来删除锁的父路径。定时检查路径被加入到reaper中。 当检查时,如果path没有子节点/路径, 此路径将被删除。每个应用中CLient应该只创建一个reaper实例。必须将lock path加到这个readper中。 reaper会定时的检查删除它们。

ChildReaper
用来清除父节点下所有的空节点。定时的调用getChildren()并将空节点加入到内部管理的reaper中。

  • 注意: 应该考虑使用LeaderSelector来运行Reapers, 因为它们不需要在每个client运行.

原文