Curator framework提供了高级API, 极大的简化了ZooKeeper的使用。 它在ZooKeeper基础上增加了很多特性,可以管理与ZOoKeeper的连接和重试机制。这些特性包括:
- 自动连接管理
** 有些潜在的错误情况需要让ZooKeeper client重建连接和重试。Curator可以自动地和透明地处理这些情况 - Cleaner API
简化原始的ZooKeeper方法,事件等 提供现代的流式接口 - 技巧(Recipe)实现
Leader选举 共享锁
Path缓存和监控 分布式队列
分布式优先级队列 ...产生Curator framework 实例
使用CuratorFrameworkFactory产生framework实例。 CuratorFrameworkFactory 既提供了factory方法也提供了builder来创建实例。 CuratorFrameworkFactory是线程安全的。你应该在应用中为单一的ZooKeeper集群共享唯一的CuratorFramework实例。
工厂方法(newClient())提供了一个简单的方式创建实例。Builder可以使用更多的参数控制生成的实例。一旦生成framework实例, 必须调用start
方法启动它。应用结束时应该调用close
方法关闭它。
CuratorFramework API
CuratorFramework 使用流程风格的接口。 代码胜于说教:
|
|
方法
方法名 | 描述 |
---|---|
create() | 开始一create操作. 可以调用额外的方法(mode or background),最后调用forPath() |
delete() | 开始一个delete操作. 调用额外的方法(version or background) , 最好调用forPath() |
checkExists() | 开始一个检查ZNode是否存在的操作. 调用额外的方法 (watch or background), 最后调用forPath() |
getData() | 开始一个获取ZNode节点数据的操作. 调用额外的方法(watch, background or get stat), 最后调用forPath() |
setData() | 开始一个设置ZNode节点数据的操作. 调用额外的方法(version or background), 最后调用forPath() |
getChildren() | 开始一个获取ZNode的子节点列表的操作.调用额外的方法(watch, background or get stat), 最后调用forPath() |
inTransaction() | 开始一个原子的ZooKeeper事务. 可以包含 create, setData, check, and/or delete 操作的组合, 然后commit() 作为一个原子操作. |
通知 Notifications
服务于后台操作和监控(watch)的通知通过ClientListener
接口发布。你通过CuratorFramework实例的addListener
方法可以注册监听器。
Interface CuratorListener
|
|
Interface ConnectionStateListener:
|
|
Interface UnhandledErrorListener:
|
|
ClientEvent
ClientEvent是事件父类, 代表后台通知和监控的类型。 ClientEvent有用的字段根据事件的类型(getType()方法获取)不同而不同。
Event Type | Event Methods |
---|---|
CREATE | getResultCode() and getPath() |
DELETE | getResultCode() and getPath() |
EXISTS | getResultCode(), getPath() and getStat() |
GETDATA | getResultCode(), getPath(), getStat() and getData() |
SETDATA | getResultCode(), getPath() and getStat() |
CHILDREN | getResultCode(), getPath(), getStat(), getChildren() |
WATCHED | getWatchedEvent() |
命名空间 namespace
因为ZOoKeeper是一个共享的集群。所以命名空间约定极为重要,各个应用在使用同一集群时不会有冲突的ZK path。
CuratorFramework 提供了命名空间的概念。当生成CuratorFramework 可以设置命名空间。CuratorFramework在调用API会在所有的path前面加上命名空间。
|
|
临时连接
Temporary CuratorFramework instances are meant for single requests to ZooKeeper ensembles over a failure prone network such as a WAN.
临时的CuratorFramework用来发送单独请求通过一个易出错的网络如WAN。CuratorTempFramework 的API是有限制的,而且,连接在不用一段时间后会被关闭。
这个想法基于Camille Fournier的文章: http://whilefalse.blogspot.com/2012/12/building-global-highly-available.html
创建CuratorTempFramework
就像正常的CuratorFramework 实例一样,CuratorTempFramework依然通过CuratorFrameworkFactory 创建。但是最后不是调用build()
方法, 而是buildTemp()
。buildTemp()创建创建CuratorTempFramework然后在它不用三分钟后就关闭它。有个buildTemp()
重载版本可以设定不活跃(不用)的时间。
Limited API
CuratorTempFramework提供了下列方法:
|
|