• Zookeeper:Curator增删改查API


    1.介绍

    What is Curator?

    Curator n ˈkyoor͝ˌātər: a keeper or custodian of a museum or other collection - A ZooKeeper Keeper.

    Apache Curator is a Java/JVM client library for Apache ZooKeeper, a distributed coordination service. It includes a highlevel API framework and utilities to make using Apache ZooKeeper much easier and more reliable. It also includes recipes for common use cases and extensions such as service discovery and a Java 8 asynchronous DSL.

    curator官网

    2.连接对象创建

    maven依赖:

        <dependencies>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.10</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>2.6.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>2.6.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.7</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

     连接对象创建的代码

        public static void main(String[] args) {
            CuratorFramework ct = CuratorFrameworkFactory.builder()
                    //ip:端口
                    .connectString("192.168.10.132:2181,192.168.10.133:2181,192.168.10.135:2181")//连接集群
                    //超时时间
                    .sessionTimeoutMs(5000)
                    //连接断开5秒后,会进行一次重连
                    .retryPolicy(new RetryOneTime(5000))
                    //命名空间,该命名空间作为父节点
                    .namespace("ct").build();
            //打开连接
            ct.start();
            //是否连接成功
            System.out.println(ct.isStarted());
            //关闭连接
            ct.close();
        }
    

    重连策略:

    RetryOneTime(int sleepMsBetweenRetry):只重连一次

    RetryNTimes(int n, int sleepMsBetweenRetries):重连n次

    RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries):每sleepMsBetweenRetries毫秒重连一次,总等待时间超过maxElapsedTimeMs毫秒后停止重连

    ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries):重连maxRetries次,重连间隔基于baseSleepTimeMs计算
    计算公式如下:baseSleepTimeMs*Math.max(1,random.nextInt(1<<(retryCount+1)))。

    3.创建节点

            ct.create()
                    //节点类型
                    .withMode(CreateMode.PERSISTENT)
                    //节点权限
                    .withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
                    //节点路径和数据
                    .forPath("/node1","node1".getBytes());
    

     支持递归创建节点

            ct.create()
                    //父节点不存在则创建
                    .creatingParentsIfNeeded()
                    //节点类型
                    .withMode(CreateMode.PERSISTENT)
                    //节点权限
                    .withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
                    //节点路径和数据
                    .forPath("/node2/node2","node2".getBytes());
    

     异步方式创建(删除、更新、查询省略):

    ct.create()
            //父节点不存在则创建
            .creatingParentsIfNeeded()
            //节点类型
            .withMode(CreateMode.PERSISTENT)
            //节点权限
            .withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
            //异步回调
            .inBackground(new BackgroundCallback() {
                public void processResult(CuratorFramework client, CuratorEvent event) throws Exception {
                    System.out.println(event.getPath()+":"+event.getType());
                }
            })
            //节点路径和数据
            .forPath("node3","node3".getBytes());

    4.更新节点 

    ct.setData().withVersion(-1).forPath("/node3","node33".getBytes());
    

    5.删除节点

    ct.delete().withVersion(-1).forPath("/node3");

     删除包含子节点的节点

    //递归删除
    ct.delete()
             .deletingChildrenIfNeeded()
             .withVersion(-1).forPath("/node2");
    

    6.查询节点

    //查询
    byte[] bytes = ct.getData().forPath("/node1");
    System.out.println(new String(bytes));
    

    读取属性:

    Stat stat = new Stat();
    byte[] bytes = ct.getData()
         .storingStatIn(stat).forPath("/node1");
    System.out.println(new String(bytes));
    System.out.println(stat);
    

    7.查询子节点数据 

    //  /ct/node1/node2
    List<String> list = ct.getChildren().forPath("/node1");
    for (String s : list) {
           System.out.println(s);
    }
    

    8.判断节点是否存在

    //如果节点不存在,则返回值为null
    Stat stat = ct.checkExists().forPath("/node11");
    

      

  • 相关阅读:
    String常用方法
    测试
    mongo aggregate group, group使用
    jquery ajax封装添加默认错误提示
    js时间格式化
    本地项目导入远程git仓库
    java设计模式:适配器模式
    mysql if示例
    hibernate指定查询字段
    js window resize延时
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/12956935.html
Copyright © 2020-2023  润新知