Java客户端_Apache Curator操作Zookeeper

news2024/11/25 12:02:31

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.coloradmin.cn/o/1036615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(七)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 接下来需要进行点击消息进行操作的动作。 1、首先先导入这个更新用户消息的一些菜单与权限&#xff0c;以…

python随手小练4

题目&#xff1a; 写一段python代码判断一句话是否是回文 具体操作&#xff1a; n input("请输入需判断的语句&#xff1a;") #因为input默认为字符串类型 if n[ : :-1] n[: :]:print("是回文") else:print("不是回文") 结果展示&#xff1a…

最新AI创作系统+ChatGPT网站源码+支持GPT4.0+支持ai绘画+支持国内全AI模型

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

华为云云耀云服务器L实例评测|centos7.9配置java环境变量安装tomcat 部署war和jar

文章目录 ⭐前言⭐配置jdk环境&#x1f496; 选择linux x64 archive&#x1f496; 云耀服务器控制台使用cloudShell ⭐配置tomcat环境&#x1f496; wget下载解压包&#x1f496; 运行tomcat&#x1f496; 控制台开放8080端口访问部署tomcat成功&#xff01; ⭐java运行jar⭐to…

VS Code 自动选择Python3 venv

我们使用VS Code写Python代码时&#xff0c;往往希望这个项目的依赖和其他项目或者全局的python环境隔离开&#xff0c;VS Code不像PyCharm那样自动完成&#xff0c;但是我们也可以快速的进行设置. 首先我们需要把python项目所在的目录添加为VS Code的Workspace 添加成works…

7.6 实现进程挂起与恢复

挂起与恢复进程是指暂停或恢复进程的工作状态&#xff0c;以达到一定的控制和管理效果。在 Windows 操作系统中&#xff0c;可以使用系统提供的函数实现进程的挂起和恢复&#xff0c;以达到对进程的控制和调度。需要注意&#xff0c;过度使用进程挂起/恢复操作可能会造成系统性…

基于or-tools的护士排班问题建模求解

基于or-tools的护士排班问题建模求解 护士排班问题&#xff08;Nurse Rostering Problem&#xff0c;NRP&#xff09;ortools官网例题1&#xff1a;A nurse scheduling problem代码解析完整代码 ortools官网例题2&#xff1a;Scheduling with shift requests代码解析完整代码 …

比特币的蒙提霍尔问题

把钱放在嘴边 我们在比特币上建立了蒙提霍尔问题模拟。 如果您知道概率谜题的正确答案&#xff0c;不仅炫耀您的数学技能&#xff0c;还会获得金钱奖励。 它完全无需信任地在链上运行。 蒙提霍尔问题 蒙提霍尔问题&#xff08;三门问题&#xff09;是一个以蒙提霍尔命名的概率…

Redis桌面管理工具Redis Desktop Manager mac中文版功能特色

Redis Desktop Manager for Mac是一款实用的Redis可视化工具。RDM支持SSL / TLS加密&#xff0c;SSH隧道&#xff0c;基于SSH隧道的TLS&#xff0c;为您提供了一个易于使用的GUI&#xff0c;可以访问您的Redis数据库并执行一些基本操作&#xff1a;将键视为树&#xff0c;CRUD键…

计算机网络工程师多选题系列——操作系统

得多选者得天下啊同志们&#xff01; 摘录按照章节顺序&#xff0c;但事实上各章节习题有交叉。 1 操作系统 1.1 操作系统概论 操作系统的主要功能&#xff1a;进程管理、存储管理、文件管理、设备管理和用户接口。 操作系统的主要功能——设备管理&#xff1a;为用户程序提…

metinfo_5.0.4 EXP Python脚本编写

文章目录 metinfo_5.0.4EXP编写SQL注入漏洞 metinfo_5.0.4EXP编写 SQL注入漏洞 漏洞点&#xff1a;/about/show.php?langcn&id22 http://10.9.75.142/metInfo_5.0.4/about/show.php?langcn&id22验证漏洞(数字型注入) 状态码区分正确与错误 做比较的时候不能采用…

实现顺序表——实践报告

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 目录 一、实验目的&#xff1a; 二、实验内容&#xff1a; 三、实验要求&#xff1a; 四.实验步骤&#xff08;给出每个函数的算法描述&#xff09;&#xff1a; 五.实验结果&#xff1a; 六.源代码 实验名称 &am…

【深度学习实验】前馈神经网络(五):自定义线性模型:前向传播、反向传播算法(封装参数)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 线性模型Linear类 a. 构造函数__init__ b. __call__(self, x)方法 c. 前向传播forward d. 反向传播backward 2. 模型训练 3. 代码整合 一、实验介绍 实现线性…

【计算机网络】IP协议(下)

文章目录 1. 特殊的IP地址2. IP地址的数量限制3. 私有IP地址和公网IP地址私有IP为什么不能出现在公网上&#xff1f;解决方案——NAT技术的使用 4. 路由5. IP分片问题为什么要进行切片&#xff1f;如何做的分片和组装&#xff1f;16位标识3位标志13位片偏移例子 细节问题如何区…

一文带你玩转logo:含义、获取、使用以及2000多知名logo大图资源

大家好&#xff01;logo是我们非常熟悉的一种事物&#xff0c;但是我发现很多场合的logo使用并不规范、高效&#xff0c;所以今天六分成长来带着大家了解一下关于logo的方方面面。 一、什么是logo&#xff1f; logo不是某一些英文单词的缩写&#xff0c;是一个完整的单词&…

uniapp如何判断是哪个(微信/APP)平台

其实大家在开发uniapp项目的时候长长会遇到这样一个问题&#xff0c;就是针对某些小程序&#xff0c;没发去适配相关的功能&#xff0c;所以要针对不同的平台&#xff0c;进行不同的处理。 #ifdef &#xff1a; if defined 仅在某个平台编译 #ifndef &#xff1a; …

机器学习实验一:使用 Logistic 回归来预测患有疝病的马的存活问题

代码&#xff1a; import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report import matplotlib.pyplot as plt def train(): # …

机器学习---神经元模型

1. 生物学的启示 神经元在结构上由细胞体、树突、轴突和突触四部分组成。 细胞体是神经元的主体&#xff0c;由细胞核、细胞质和细胞膜3部分组成。细胞体的外部是细胞膜&#xff0c;将 膜内外细胞液分开。由于细胞膜对细胞液中的不同离子具有不同的通透性&#xff0c;这使得膜…

XXE 漏洞及案例实战

文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用&#xff08;触发漏洞地址&#xff09;2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat…

【操作系统】线程、多线程

为什么要引入线程&#xff1f; 传统的进程只能串行的执行一系列程序&#xff0c;线程增加并发度。同一个进程分为多个线程。 线程是调度的基本单元&#xff0c;程序执行流的最小单位&#xff0c;基本的CPU执行单元。 进程是资源分配的基本单位。 线程的实现方式 用户级线程 代…