Curator简介
Curator提供了一套Java类库, 可以更容易的使用ZooKeeper。 ZooKeeper本身提供了Java Client的访问类,但是API太底层,不宜使用, 容易出错。 Curator提供了三个组件。
Curator共有四个子项目组成:
- Curator client用来替代ZOoKeeper提供的类, 它封装了底层的管理并提供了一些有用的工具;
- Curator framework提供了高级的API来简化ZooKeeper的使用。它增加了很多基于ZooKeeper的特性,帮助管理ZooKeeper的连接以及重试操作;
- Curator Recipes提供了使用ZooKeeper的一些通用的技巧(方法);
- Curator Service Discovery分布式的服务发现和服务管理;
- Curator Test提供了基于ZooKeeper的单元测试工具。
在基本的使用过程中,经常会用到Curator framework,Recipes等。这里分别介绍下这几个库的使用。
Curator frameowrk使用指南
特点
- 自动化的连接管理:重新建立到ZooKeeper的连接和重试机制;
- 清理API:简化了原生的ZooKeeper的方法,事件等
提供了一个现代的流式接口; - 提供了Recipes实现,提供Leader Election,Shared Lock,分布式队列,分不死you xian;
依赖库说明
首先看下Curator framework的mvn库,这里使用3.0版本来学习相关内容:
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>3.0.0</version>
</dependency>
使用时注意:
Curator框架通过CuratorFrameworkFactory以工厂模式和builder模式创建CuratorFramework实例。
工厂方法newClient()提供了一个简单方式创建实例。 而Builder提供了更多的参数控制。一旦你创建了一个CuratorFramework实例,你必须调用它的start()启动,在应用退出时调用close()方法关闭.
使用指南
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework curatorFramework = null;
try {
curatorFramework = CuratorFrameworkFactory.newClient("192.168.1.169:2181", retryPolicy);
curatorFramework.start();
System.out.println(curatorFramework.getState().toString());
}
catch (Exception e) {
}
finally {
CloseableUtils.closeQuietly(curatorFramework);
}
ZNode的基本操作:
方法 | 描述 |
---|---|
create() | 开始创建操作, 可以调用额外的方法(比如方式mode 或者后台执行background) 并在最后调用forPath()指定要操作的ZNode |
delete() | 开始删除操作. 可以调用额外的方法(版本或者后台处理version or 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()作为一个原子操作提交 |
transactionOp() | 用于allocate operations to be used with transaction(). |
transaction() | 自动提交一个操作集合为一个事物. |
getACL() | 返回ZNode节点的ACL设置,并在最后调用forPath(),以指定要操作的ZNode节点 |
setACL() | 设置节点的ACL配置,并在最后调用forPath(),以指定需要操作的ZNode节点 |
getConfig() | 获取最后一次提交的配置信息,forEnsemble() |
reconfig() | 用于重新设置配置信息,可以通过forEnsemble()调用额外的方法 |
增删改查:
client.create().forPath("/head", new byte[0]);
client.delete().inBackground().forPath("/head");
client.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath("/head/child", new byte[0]);
client.getData().watched().inBackground().forPath("/test");
参考资料:
- http://ifeve.com/zookeeper-curato-framework/
参考资料:
- http://curator.apache.org/