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

Apache Curator 创建节点时,如果节点存储就会抛出异常吗?

在Apache Curator中,创建节点时,如果该节点已经存在,并且你的代码没有正确处理这种情况,那么会抛出`NodeExistsException`异常。这是ZooKeeper客户端库(包括Curator)的常见行为,因为它需要确保ZooKeeper中的每个znode路径是唯一的。

以下是几种处理这种情况的方法:

1. **检查节点是否存在**:在尝试创建节点之前,你可以先检查节点是否存在。如果存在,你可以选择更新节点数据或者捕获异常不做任何操作。

    ```java
    try {
        if (client.checkExists().forPath("/nodePath") == null) {
            client.create().forPath("/nodePath", data);
        } else {
            // 节点已存在,可以选择更新数据或忽略
            client.setData().forPath("/nodePath", newData);
        }
    } catch (NodeExistsException e) {
        // 节点已存在,处理异常
    }
    ```

2. **使用合适的创建模式**:Curator提供了不同的节点创建模式,例如`CreateMode.EPHEMERAL`(临时节点)和`CreateMode.PERSISTENT`(持久节点)。如果你使用`CreateMode.EPHEMERAL_SEQUENTIAL`或`CreateMode.PERSISTENT_SEQUENTIAL`,Curator会自动处理节点名称冲突,通过添加序号来创建一个新的顺序节点。

3. **捕获异常**:在尝试创建节点的代码块中捕获`NodeExistsException`,然后根据业务逻辑决定如何处理。

4. **使用重试机制**:Curator的`RetryPolicy`可以配置重试策略,当发生`NodeExistsException`时,根据配置的策略决定是否重试。

5. **使用`ProtectedEphemeralSequentialCreate`**:如果你使用`create()`方法的`withProtection()`选项,Curator会创建一个保护类型的临时顺序节点。如果尝试创建的节点已经存在,Curator会抛出`NodeExistsException`。

请注意,抛出异常是ZooKeeper和Curator设计的一部分,用于确保数据的一致性和避免意外覆盖或创建重复的节点。正确的异常处理可以使你的应用程序更加健壮和可靠。
 


放代码

@Testpublic void method7() throws Exception {//重试策略RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000,3,3000);//创建客户端CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.200.130:2181", 1000, 1000, exponentialBackoffRetry);client.start();CuratorFrameworkState state = client.getState();//检测是否连接正常if (state == CuratorFrameworkState.STARTED) {ExistsBuilder existsBuilder = client.checkExists();//检测节点是否存在,不存在则创建if (existsBuilder.forPath("/testapi") == null) {client.create().forPath("/testapi","good".getBytes());}byte[] bytes = client.getData().forPath("/testapi");System.out.println(new String(bytes));//设置时延5秒关闭Thread.sleep(5000);client.close();} else if (state == CuratorFrameworkState.STOPPED) {System.out.println("没有连接上");}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验
  • 计算机网络408考研 2021
  • C++ Rect And Point Search Algorithm
  • CORS与JSONP漏洞原理及其复现
  • 模拟退火的
  • WebRTC ICE配置类型
  • MySQL使用(表)
  • 【零基础实战】基于物联网的人工淡水湖养殖系统设计
  • 如何将 GTA Online 的加载时间缩短 70%
  • docker搭建内网穿透服务
  • 保姆级教程,一文了解LVS
  • Ashok:一款多功能开源网络侦查OSINT工具
  • docker基础命令
  • 【Kubernetes】k8s集群资源调度
  • 概率论原理精解【9】
  • bearychat的java client
  • conda常用的命令
  • ES6系统学习----从Apollo Client看解构赋值
  • extjs4学习之配置
  • JavaScript设计模式系列一:工厂模式
  • Leetcode 27 Remove Element
  • Vue--数据传输
  • 创建一个Struts2项目maven 方式
  • 官方解决所有 npm 全局安装权限问题
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 用Visual Studio开发以太坊智能合约
  • 再谈express与koa的对比
  • 最简单的无缝轮播
  • 回归生活:清理微信公众号
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​flutter 代码混淆
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (待修改)PyG安装步骤
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (含笔试题)深度解析数据在内存中的存储
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (算法)Game
  • (循环依赖问题)学习spring的第九天
  • (转)ObjectiveC 深浅拷贝学习
  • .bat文件调用java类的main方法
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 4.0发布后不能正常显示图片问题
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET 反射 Reflect
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器