Zookeeper-------Apache Curator操作API
目录
Zookeeper-------Apache Curator操作API
2.5 curator使用usingWatcher(与原生API一次监听)
2.6 curator使用nodeCache(一次注册N次监听)
2.7curator使用PathChildrenCache 子节点监听
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这个方法创建的父节点必须是永久节点