• 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依赖

    1. <dependency>
    2. <groupId>org.apache.curator</groupId>
    3. <artifactId>curator-recipes</artifactId>
    4. <version>4.2.0</version>
    5. </dependency>

    创建会话

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

    创建节点

    1. cur.create().withMode(CreateMode.PERSISTENT)
    2. .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

    1. Stat stat = new Stat();
    2. 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");
    

    监听机制

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

  • 相关阅读:
    【每日刷题】Day62
    以下关于ASP.NET网页结构的叙述中正确的是
    【uvm】How to write uvm sequence
    使用 Rust 开发:以太坊与 Layer2 生态建设新趋势
    SAP PA MM 后台配置
    Wireshark流量分析例题
    mybatis/mp批量插入非自增主键数据
    数据库管理系统
    postgresql数据库之分割字符串函数
    OneFlow源码解析:自动微分机制
  • 原文地址:https://blog.csdn.net/weixin_68967484/article/details/133209291