Zookeeper-------Apache Curator操作API

Zookeeper-------Apache Curator操作API

目录

Zookeeper-------Apache Curator操作API

1、操作前准备工作和原生API的一些缺点

2、Curator的API详解

2.1 创建会话

2.2 创建结点

2.3 删除结点和修改结点

2.4 获取某个结点的信息

2.5 curator使用usingWatcher(与原生API一次监听)

2.6 curator使用nodeCache(一次注册N次监听)

2.7curator使用PathChildrenCache 子节点监听

2.8 curator之acl权限操作


1、操作前准备工作和原生API的一些缺点

    idea创建一个maven项目,并引入以下依赖,并使用centos启动zookeeper服务。

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
        </dependency>

curator简介与客户端之间的异同点:

(1)ZooKeeper原生Java API的不足之处:

  • 在连接zk超时的时候,不支持自动重连,需要手动操作
  • Watch注册一次就会失效,需要反复注册
  • 不支持递归创建节点

(2)Apache curator:

  • Apache 的开源项目
  • 解决Watch注册一次就会失效的问题
  • 提供的 API 更加简单易用
  • 提供更多解决方案并且实现简单,例如:分布式锁
  • 提供常用的ZooKeeper工具类
  • 编程风格更舒服,

2、Curator的API详解

2.1 创建会话

 CuratorFramework cc = CuratorFrameworkFactory.builder()  //使用工厂类来建造客户端的实例对象
                .connectString("ip:port")      //服务器地址
                .sessionTimeoutMs(2000)        //会话过期时间
                .connectionTimeoutMs(5000)     //重连时间
                .retryPolicy(new ExponentialBackoffRetry(1000,3)) //重连策略
                .namespace("test")              //namespace代表命名空间
                .build();                       //建立连接通道

           //启动客户端    
           cc.start();

  retryPolicy,4种重连策略:

    //重连3次,每次休息3秒
    new RetryNTimes(3,3000);

    //重连3次,每次休息大约是1秒
    new ExponentialBackoffRetry(1000,3);

    //初始化一个大概的等待时间1秒,然后开始重连,最多重连3次,每次最多休息2秒
    new ExponentialBackoffRetry(1000,3,2000);

    //计算通过这个初始化的大约时间,计算实际需要睡眠多久
    long sleepMs = baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1)));

2.2 创建结点

 

cc.create().creatingParentsIfNeeded()  // 创建父节点,也就是会递归创建
                .withMode(CreateMode.PERSISTENT)  // 节点类型(可以参考原API)
                .withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)  // 节点的acl权限
                .forPath("/test/a/b", "data".getBytes());

注意:只有叶节点可以做临时节点,所以叶节点的父节点必须是永久节点,也就是creatingParentsIfNeeded这个方法创建的父节点必须是永久节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值