写点什么

zookeeper-curator 开源框架介绍

作者:zarmnosaj
  • 2022 年 7 月 22 日
  • 本文字数:998 字

    阅读完需:约 3 分钟

zookeeper 开源客户端 curator 介绍

原生 zookeeper 的 API 的存在一些不足之处:


  1. 连接对象是异步创建,需要手写代码,写等待逻辑

  2. zookeeper 的连接没有自动重连和超时机制

  3. watcher 是一次注册,只会生效一次,重复使用需重复注册

  4. 创建节点时不支持递归创建树形节点


有一个 curator 开源框架能解决这些问题,提供 zooKeeper 各种应用场景,比如:分布式锁服务、集群领导选举、分布式队列等功能的抽象封装,实现了 Fluent 风格的 API 接口。curator 开源框架的特点:


  1. 提供了 session 会话超时重连机制

  2. watcher 支持反复注册,而不至于一次就实效

  3. 简化开发了 api

  4. 遵循 Fluent 风格的 API

  5. 提供了分布式锁服务、共享计数器、缓存机制等机制


maven 依赖:


<groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>版本</version>
复制代码

连接

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5);CuratorFramework client= CuratorFrameworkFactory.builder().connectString("192.168.0.1:2181").sessionTimeoutMs(5000).retryPolicy(retryPolicy).namespace("node").build()
复制代码


RetryPolicy 表示 session 重连策略,有三种类型:


  1. new RetryOneTime(5000) 表示 5 秒后只重连一次

  2. new RetryNTimes(3,5000) 表示每 5 秒重连一次,一共重连 3 次

  3. new RetryUntilElapsed(10000,3000) 表示每 3 秒重连一次,总等待时间超过 10 秒后停止重连


sessionTimeoutMs 表示设置会话超时时间

新增节点

client = ...(连接代码)
client.create().withMode(CreateMode.PERSISTENT).withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE).forPath("/node", "abc".getBytes());
复制代码


withMode() 表示设置新增节点的类型


withACL() 表示设置节点的权限

更新节点

client = ...(连接代码)
client.setData().forPath("/node", "abcd".getBytes())
client.setData().withVersion(5).forPath("/node", "abcde".getBytes());
复制代码


forPath() 表示设置节点的路径和数据


withVersion() 表示指定版本号更新


另外还可以用 inBackground()方法指定异步进行更新数据

删除节点

client = ...(连接代码)
client.delete().forPath("/node");

client.delete().withVersion(5).forPath("/node");
client.delete().deletingChildrenIfNeeded().withVersion(5).forPath("/node");
复制代码


withVersion() 表示指定版本号进行删除


deletingChildrenIfNeeded() 表示指定删除包含子节点的节点


另外也可以使用 inBackground()方法指定异步删除

发布于: 2 小时前阅读数: 9
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
zookeeper-curator开源框架介绍_7月月更_zarmnosaj_InfoQ写作社区