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
Curator 编译好的类库被发布到Maven Center中。Curator包含几个artifact. 你可以根据你的需要在你的项目中加入相应的依赖。对于大多数开发者来说,引入
Curator的类库可以从Maven仓库中获取。上一篇文章已经介绍了它的相关组件。无论你使用Maven,
Gradle还是 Ant都可以很容易的将curator包含到你的编译脚本中。
大部分用户都想使用curator预置的技巧(解决方案),所以你需要加上
加上
Curator使用流式风格。
非常适合编程的一种风格, 如果你还了解它,建议先熟悉它。
Curator连接实例(CuratorFramework)由CuratorFrameworkFactory产生。对于你要连接的ZooKeeper集群, 只需一个
它会使用缺省值创建到zookeeper集群的连接。唯一需要设置的是指定重试策略。大部分情况你只需下面的代码:
client必须调用
(不再使用时调用close方法)
一旦获得了CuratorFramework实例,就可以直接调用zookeeper,就像ZOoKeeper发布包中提供的原始的
好处是Curator自己负责连接的管理和重试, 不必再写复杂的代码处理这个问题(如果你用ZOoKeeper自己的API, 就会理解管理连接的痛苦了)
来看Curator提供的两个技巧。
代码相当的简单。
转至:http://colobu.com/
除此之外, 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 | 各种工具类 |
Client | ZooKeeper本身提供的类的替代者。 负责底层的开销以及一些工具 |
Errors | Curator怎样来处理错误和异常 |
Extensions | curator-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) |
123 | RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3)CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);client.start(); |
start方法。
(不再使用时调用close方法)
直接调用ZooKeeper
一旦获得了CuratorFramework实例,就可以直接调用zookeeper,就像ZOoKeeper发布包中提供的原始的ZooKeeper对象一样。
1 | client.create().forPath("/my/path", myData) |
技巧
来看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使用手记
- Zookeeper系列(十一)Zookeeper开源客户端之Curator基本使用
- Zookeeper客户端Curator使用详解
- Zookeeper开源客户端框架Curator的简单使用
- ZooKeeper客户端curator组件介绍
- zookeeper -- 第八章 zk开源客户端 Curator介绍 (上)
- zookeeper使用(三)--Curator客户端操作zookeeper
- zookeeper客户端curator使用手记
- Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)
- Zookeeper实例Curator API-使用curator来创建一个ZooKeeper客户端
- zookeeper -- 第八章 zk开源客户端 Curator介绍 (下)
- Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情
- Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用
- Zookeeper实例Curator API-使用curator来创建一个含隔离命名空间的ZooKeeper客户端
- Zookeeper客户端Curator使用详解
- 【ZooKeeper】Java客户端API使用介绍。
- 7.5 zookeeper客户端curator的基本使用 + zkui
- Zookeeper实例Curator API-使用Fluent风格的API接口来创建一个ZooKeeper客户端
- ZooKeeper客户端Curator使用一 创建连接
- zookeeper 开源客户端Curator使用