Curator操作Zookeeper

目录

  • Curator简介

  • 使用前准备工作

  • 基本API


Curator简介

Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Curator使用链式编程风格,易读性强。

使用前准备工作

包:
1、curator-framework:对zookeeper的底层api的一些封装
2、curator-client:提供一些客户端的操作,例如重试策略等
3、curator-recipes:封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器、分布式Barrier等

基本API
1、创建会话
参数名说明
connectString服务器列表(host:port)多服务器以“,”分隔
sessionTimeoutMs会话超时时间,默认60000ms
connectionTimeoutMs连接超时时间,默认15000ms
retryPolicy重试连接策略
namespace隔离命名空间,非必项
重试连接策略说明
ExponentialBackoffRetry重试指定次数,且每次重试之间停顿的时间逐增
RetryNtimes指定最大重试次数
RetryOneTimes仅重试一次
RetryUntilElapsed一直重试到达到规定时间
//重试策略,初试时间1秒,重试10次
RetryPolicy policy = new ExponentialBackoffRetry(1000, 10);

//通过工厂创建Curator
CuratorFramework client =
CuratorFrameworkFactory.builder().connectString(CONNECT_ADDR)
.sessionTimeoutMs(SESSION_TIMEOUT).retryPolicy(policy).namespace(NAMESPACE).build();

namespace为每个业务分配一个独立的命名空间,即指定一个根目录,这样zookeeper客户端和服务端就有一棵对应的树,实现不同业务之间的隔离。

2、启动客户端
client.start();
3、创建节点

创建节点的链式项:creatingParentsIfNeeded(创建父节点,
自动递归创建所有所需的父节点)、withMode(创建的节点模式)、forPath(创建的节点路径)、withACL(安全项)

节点模式说明
PERSISTENT持久化
PERSISTENT_SEQUENTIAL持久化带序列号
EPHEMERAL临时
EPHEMERAL_SEQUENTIAL临时带序列号
ExecutorService executor = Executors.newCachedThreadPool();

// inBackground绑定异步回调方法。比如在创建节点时绑定一个回调方法,该回调方法可以输出服务器的状态码以及服务器的事件类型等信息,还可以加入一个线程池进行优化操作
curator.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
                .inBackground((framework, event) -> { //添加回调
                    System.out.println("回调" );
                }, executor).forPath("/path", "内容".getBytes());
4、检查节点是否存在
client.checkExists().forPath("/path");
5、读取节点数据
client.getData().forPath("/path");

// 读取节点数据,同时获取该节点的状态信息
Stat stat = new Stat();
client.getData().storingStatIn(stat).forPath("/path");
6、更新节点数据
Stat stat = client.setData().forPath("path","data".getBytes());
7、获取节点所有子节点路径
List<String> children = client.getChildren().forPath("/path");
8、删除节点

删除节点的链式项:deletingChildrenIfNeeded(删除子节点,
递归删除其所有的子节点)、guaranteed(安全删除,
只要客户端会话有效,那么Curator会在后台持续进行删除操作,直到删除节点成功)、withVersion(版本检查)、forPath(删除的节点路径)

client.delete().guaranteed().deletingChildrenIfNeeded().withVersion(10086).forPath("/path");
9、事务
// 开启事务             
CuratorTransaction transaction = client.inTransaction();                
Collection<CuratorTransactionResult> results = 
        transaction.create().forPath("/a/path", "some data".getBytes())
        .and()
        .setData().forPath("/another/path", "other data".getBytes())
        .and()
        .delete().forPath("/yet/another/path")
        .and().commit();
for (CuratorTransactionResult result : results) {
        System.out.println(result.getForPath() + " - " + result.getType());
 } 

注意:事务操作的时候不支持自动创建父节点,也就是说你想创建的节点如果是多层的,那么父节点一定要存在才可以。

参考:1、http://www.throwable.club/2018/12/16/zookeeper-curator-usage/#Zookeeper客户端Curator使用详解
2、https://blog.csdn.net/haoyuyang/article/details/53469269
3、https://blog.csdn.net/qq_34021712/article/details/82872530
4、https://blog.csdn.net/zmx729618/article/details/62417330

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值