您的位置:首页 > 其它

ZooKeeper客户端curator介绍及使用

2014-12-20 22:05 519 查看
Curator提供了一套Java类库, 可以更容易的使用ZooKeeper。 ZooKeeper本身提供了Java Client的访问类,但是API太底层,不宜使用, 容易出错。 Curator提供了三个组件。 Curator client用来替代ZOoKeeper提供的类, 它封装了底层的管理并提供了一些有用的工具。Curator framework提供了高级的API来简化ZooKeeper的使用。它增加了很多基于ZooKeeper的特性,帮助管理ZooKeeper的连接以及重试操作。Curator Recipes提供了使用ZooKeeper的一些通用的技巧(方法)。
除此之外, Curator Test提供了基于ZooKeeper的单元测试工具。
所谓技巧(Recipes),也可以称之为解决方案, 或者叫实现方案, 是指ZooKeeper的使用方法, 比如分布式的配置管理, Leader选举等。

Curator最初由Netflix的Jordan Zimmerman开发。20117月在github上基于Apache 2.0开源协议开源。 之后发布了多个版本,并被广泛的应用。

Curator作为Apache ZooKeeper天生配套的组件。ZooKeeper的Java开发者自然而然的会选择它在项目中使用。



Curator作为Apache


组件概览

组件名描述
Recipes通用ZooKeeper技巧(“recipes”)的实现. 建立在Curator Framework之上
Framework简化zookeeper使用的高级. 增加了很多建立在zooper之上的特性. 管理复杂连接处理和重试操作
Utilities各种工具类
ClientZooKeeper本身提供的类的替代者。 负责底层的开销以及一些工具
ErrorsCurator怎样来处理错误和异常
Extensionscurator-recipes包实现了通用的技巧,这些技巧在ZooKeeper文档中有介绍。为了避免是这个包(package)变得巨大, recipes/applications将会放入一个独立的
extension
包下。并使用命名规则curator-x-name.


Maven / Artifacts

Curator 编译好的类库被发布到Maven Center中。Curator包含几个artifact. 你可以根据你的需要在你的项目中加入相应的依赖。对于大多数开发者来说,引入
curator-recipes
这一个就足够了。


使用Curator

Curator的类库可以从Maven仓库中获取。上一篇文章已经介绍了它的相关组件。无论你使用Maven,
Gradle还是 Ant都可以很容易的将curator包含到你的编译脚本中。

大部分用户都想使用curator预置的技巧(解决方案),所以你需要加上
curator-recipes
依赖。如果你想包装ZOoKeeper增加连接管理重试机制等,
加上 
curator-framework
依赖。


得到连接

Curator使用流式风格
非常适合编程的一种风格, 如果你还了解它,建议先熟悉它。

Curator连接实例(CuratorFramework)由CuratorFrameworkFactory产生。对于你要连接的ZooKeeper集群, 只需一个
CuratorFramework
对象即可。
1
CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy)
它会使用缺省值创建到zookeeper集群的连接。唯一需要设置的是指定重试策略。大部分情况你只需下面的代码:
123
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3)CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);client.start();
client必须调用
start
方法。
(不再使用时调用close方法)


直接调用ZooKeeper

一旦获得了CuratorFramework实例,就可以直接调用zookeeper,就像ZOoKeeper发布包中提供的原始的
ZooKeeper
对象一样。
1
client.create().forPath("/my/path", myData)
好处是Curator自己负责连接的管理和重试, 不必再写复杂的代码处理这个问题(如果你用ZOoKeeper自己的API, 就会理解管理连接的痛苦了)


技巧

来看Curator提供的两个技巧。


分布式的锁

123456789101112
InterProcessMutex lock = new InterProcessMutex(client, lockPath);if ( lock.acquire(maxWait, waitUnit) ) {    try     {        // do some work inside of the critical section here    }    finally    {        lock.release();    }}


leader选举

12345678910111213
LeaderSelectorListener listener = new LeaderSelectorListenerAdapter(){    public void takeLeadership(CuratorFramework client) throws Exception    {        // this callback will get called when you are the leader        // do whatever leader work you need to and only exit        // this method when you want to relinquish leadership    }}LeaderSelector selector = new LeaderSelector(client, path, listener);selector.autoRequeue();  // not required, but this is behavior that you will probably expectselector.start();
代码相当的简单。

转至:http://colobu.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ZooKeeper Curator