当前位置: 首页 > news >正文

Java客户端_Apache Curator操作Zookeeper

Curator是 Netflix公司开源的一套ZooKeeper客户端框架。和ZkClient一样,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和 NodeExistsException异常等,目前已经成为了Apache的顶级项目,是全世界范围内使用最广泛的ZooKeeper客户端之一。

Curator包

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

添加Maven依赖

<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version>
</dependency>

创建会话

 String connStr = "192.168.18.128:2181";CuratorFramework cur= CuratorFrameworkFactory.builder().connectString(connStr).connectionTimeoutMs(5000).retryPolicy(new ExponentialBackoffRetry(1000,3)).build();cur.start();//连接

创建节点

cur.create().withMode(CreateMode.PERSISTENT).forPath("/root", "baizhan".getBytes());

删除数据节点

cur.delete().forPath("/root");

注意:

此方法只能删除叶子节点,否则会抛出异常。

删除一个节点,并且递归删除其所有的子节点

cur.delete().deletingChildrenIfNeeded().forPath("/root");

删除一个节点,强制指定版本进行删除

cur.delete().withVersion(10086).forPath("path");

删除一个节点,强制保证删除

cur.delete().guaranteed().forPath("path");

注意:

guaranteed()接口是一个保障措施,只要客户端会话有效,那么Curator会在后台持续进行删除操作,直到删除节点成功。

注意:上面的多个流式接口是可以自由组合的,例如:

cur.delete().guaranteed().deletingChildrenIfNeeded().withVersion(10086).forPath("/root");

读取数据节点数据

读取一个节点的数据内容

cur.getData().forPath("/root");

注意:

此方法返的返回值是byte[ ];

读取一个节点的数据内容,同时获取到该节点的stat

Stat stat = new Stat();
client.getData().storingStatIn(stat).forPath("path");

更新数据节点数据

更新一个节点的数据内容

client.setData().forPath("path","data".getBytes());

注意:

该接口会返回一个Stat实例;

更新一个节点的数据内容,强制指定版本进行更新

client.setData().withVersion(10086).forPath("path","data".getBytes());

检查节点是否存在

client.checkExists().forPath("path");

注意:

该方法返回一个Stat实例,用于检查ZNode是否存在的操作. 可以调用额外的方法(监控或者后台处理)并在最后调用forPath()指定要操作的ZNode

获取某个节点的所有子节点路径

client.getChildren().forPath("path");

监听机制

永久都会存在, 减少了之前监听器重复注册的问题

http://www.lryc.cn/news/175200.html

相关文章:

  • 14:00面试,14:07就出来了,问的问题有点变态
  • 《你好,C语言》:从另一个视角学习并重新审视C语言的意义
  • 信创之国产浪潮电脑+统信UOS操作系统体验1:硬件及软件常规功能支持情况介绍
  • JAVA学习-全网最详细
  • 基于物联网的农村地区智能微电网系统(Simulink)
  • JavaScript系列从入门到精通系列第九篇:JavaScript中赋值运算符和关系运算符以及Unicode编码介绍
  • 租用独立服务器有哪些常见的误区?
  • 【学习笔记】POJ 3834 graph game
  • 无监督学习算法Kmeans
  • 区块链(4):区块链技术模型介绍
  • go语言 rune 类型
  • DS18B20温度传感器
  • LeetCode322. 零钱兑换
  • AUTOSAR扫盲贴--不是黑神话【基本概念和方法论】
  • python抠图(去水印)开源库lama-cleaner入门应用实践
  • Nginx可视化管理工具结合cpolar实现远程访问内网服务
  • CCC数字钥匙设计【BLE】 --建立安全测距
  • Ubuntu22.04 Opencv4.5.1 CPU和GPU编译攻略,Opencv CPU和GPU编译保姆教程 亲自测试。
  • 常识判断 --- 党史
  • Rust 基础再理解
  • Opencv cuda版本在ubuntu22.04中安装办法,解决Could NOT find CUDNN的办法
  • 全网首发YOLOv8暴力涨点:Gold-YOLO,遥遥领先,超越所有YOLO | 华为诺亚NeurIPS23
  • BD就业复习第四天
  • 数据结构 | 树
  • Android11 适配
  • UML基础与应用之对象图
  • 英码科技精彩亮相火爆的IOTE 2023,多面赋能AIoT产业发展!
  • 400G QSFP-DD FR4 与 400G QSFP-DD FR8光模块:哪个更适合您的网络需求?
  • 【Android】Kotlin 中的 apply、let、with、also、run 到底有啥区别?
  • 设计模式——职责链模式