Zookeeper:Curator

来源:互联网 发布:unity3d ios插件 编辑:程序博客网 时间:2024/06/14 18:52

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/

0 0
原创粉丝点击