07_zookeeper的客户端工具curator_基本api
【zk原生api的不足之处】
* 不能自动超时重连,需要手动操作
* watcher事件注册一次后就会失效
* 不支持递归创建节点
【 Apache curator 】
* 解决了watcher的注册一次就失效的问题
* api相对更加简单易用
* 提供更多的解决方案并且实现简单:如分布式锁
* 提供了常用的zk工具类
【实例化zk客户端的多种重试机制】
package com.zk.demo;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.*; /**
* Created by HigginCui on 2018/9/23.
*/
public class CuratorClient { public CuratorFramework client = null;
public static final String zkServerPath = "127.0.0.1"; /**
* 构造方法中实例化zk客户端
*/
public CuratorClient() { /**
* 同步创建zk示例,原生api是异步的
* curator连接zk的策略:ExponentialBackoffRetry
*
* ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)
* baseSleepTimeMs:初始sleep的时间
* maxRetries:最大重试次数
* maxSleepMs:最大充实实际那
*/
RetryPolicy retryPolicy1 = new ExponentialBackoffRetry(, ); /**
* curator连接zk的策略:RetryNTimes
*
* RetryNTimes(int n, int sleepMsBetweenRetries)
* n:重试的次数
* sleepMsBetweenRetries:每次重试的间隔的时间
*/
RetryPolicy retryPolicy2 = new RetryNTimes(, ); /**
* curator连接zk的策略:RetryOneTime
*
* RetryOneTime(int sleepMsBetweenRetry)
* sleepMsBetweenRetry:每次重试间隔的时间
*/
RetryPolicy retryPolicy3 = new RetryOneTime(); /**
* curator连接zk的策略:RetryForever
*
* RetryForever(int retryIntervalMs)
* 永远重试,不推荐
*/
RetryPolicy retryPolicy4 = new RetryForever(); /**
* curator连接zk的策略:RetryUntilElapsed
*
* RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries)
* maxElapsedTimeMs:最大重试时间
* sleepMsBetweenRetries:每次重试间隔
* 重试时间超过maxElapsedTimeMs后,就不在重试
*/
RetryPolicy retryPolicy5 = new RetryUntilElapsed(, ); client = CuratorFrameworkFactory.builder()
.connectString(zkServerPath)
.sessionTimeoutMs()
.retryPolicy(retryPolicy2)
.namespace("workspace")
.build();
client.start();
} public void closeClient() {
if (null != client) {
this.client.close();
}
}
}
【创建节点】
package com.zk.demo;
import org.apache.curator.framework.CuratorFramework;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs; /**
* Created by HigginCui on 2018/9/23.
*/
public class CuratorClientTest { public static void main(String[] args) throws Exception{
CuratorFramework client = new CuratorClient().client;
boolean isCuratorStarted = client.isStarted();
System.out.println("当前客户端是否正常连接:"+isCuratorStarted); //创建节点
String nodePath = "/curator/ccc1";
byte[] data = "hahaha".getBytes();
client.create()
.creatingParentsIfNeeded()
.withMode(CreateMode.PERSISTENT)
.withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)
.forPath(nodePath,data); }
}
【运行结果】


【更新节点数据】
//更新节点数据
byte[] newData = "xixixi".getBytes();
client.setData()
.withVersion()
.forPath(nodePath,newData);
【运行结果】

【删除节点】
//删除节点
client.delete()
.guaranteed() //如果删除失败,那么在后端还是会继续删除,直到成功
.deletingChildrenIfNeeded() //如果有子节点会一并删除
.withVersion()
.forPath(nodePath);
【运行结果】

【读取节点的数据】
//读取节点数据
Stat stat = new Stat();
byte[] data = client.getData()
.storingStatIn(stat)
.forPath(nodePath);
System.err.println("节点 "+nodePath+" 的数据为:"+new String(data)+",version为:"+stat.getVersion());
先在zk上设置好数据

【运行结果】


【查询子节点】
//查询子节点
List<String> childNodes = client.getChildren()
.forPath(nodePath);
for (String childNode : childNodes){
System.out.println("childNode = "+childNode);
}
提前创建好一批子节点

【运行结果】

【判断节点是否存在】
//判断节点是否存在,如果节点不存在则为空
Stat statExist = client.checkExists()
.forPath(nodePath);
System.err.println(statExist);
Stat statExist2 = client.checkExists()
.forPath(nodePath+"/lll"); //这里故意设置一个不存在的节点
System.err.println(statExist2);
【运行结果】

07_zookeeper的客户端工具curator_基本api的更多相关文章
- 基于tauri打造的HTTP API客户端工具-CyberAPI
国庆长假和朋友聚会的时候,和朋友谈起最近这段时间捣鼓tauri,写了一个HTTP API客户端工具.『你写了这么多东西,其实有想过是为了啥不?』为了啥这是一个很大的命题,当初每个项目的时候都想过它应该 ...
- 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- MetaWeblog博客客户端工具之Windows Live Writer
吐槽&注意的坑: 刚听说了有这么一个东西,据说Windows Live Writer开源之后就改名为Open Live Writer,我以为Open Live Writer就要比Windows ...
- 用edtftpj实现Java FTP客户端工具
edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活.edtftpj有多种版本,分别是java..net和js版本.对于Java版的有一个免费版本. ...
- MySQL初始化以及客户端工具的使用
MySQL初始化以及客户端工具的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是关系型数据库 关系型数据库通常是把所有的数据都组织成二维关系.之所以称为关系型数据库是 ...
- mysql客户端工具
MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如 mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的.虽然有些人对这些工具的功能都已 ...
- 高可用Kubernetes集群-4. kubectl客户端工具
六.部署kubectl客户端工具 1. 下载 [root@kubenode1 ~]# cd /usr/local/src/ [root@kubenode1 src]# wget https://sto ...
- SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!
大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http ...
- 几款Git GUI客户端工具
工欲善其事,必先利其器. 作为一名开发人员,你不可能不知道git,无论你是开发自己的开源项目还是和团队一起进行大规模产品的开发,git都已经是源代码管理工具的首选.当然,那些hardcore deve ...
随机推荐
- Python多继承解析顺序的C3线性算法流程解析
Python多继承MRO 在Python2.1中,采用了经典类,使用深度优先算法解析. Python2.2中,引入了新式类,使用深度优先算法和广度优先算法. 在Python2.3以后的版本中,经典类和 ...
- Angular--TypeScript finalize 方法
self._entityService .getAll() .pipe( finalize(() => { if (self.sheet && self.sheet.length ...
- AVL树插入(Python实现)
建立AVL树 class AVLNode(object): def __init__(self,data): self.data = data self.lchild = None self.rchi ...
- 学习总结 —— python
1.了解python 学习python 3 入门知识 python 库 .包 .模块 2.了解pycharm Pycharm 导入 Python 包.模块 pycharm 快捷键 3.了解djan ...
- Ubuntu18.04安装thunderbird并设置中文
Ubuntu18.04安装thunderbird并设置中文 安装thunderbird sudo apt-get install thunderbird 安装中文包 sudo apt-get inst ...
- Restful API学习笔记
之前关于这个概念在网上看了一些,看完似懂非懂,模模糊糊,发现专业术语或者说书面表达的形式对于理解这种十分抽象的概念还是低效了点. 书面文档方面看了以下几个: 理解本真的REST架构风格 1. 要深入理 ...
- python入门练习之如何连接数据库
!/usr/bin/python -- coding: UTF-8 -- author = 'luke' from sqlalchemy import create_engine from sqlal ...
- SQL端通过脚本判断文件夹是否存在 并创建
做数据库备份作业的时候..想按日期建立文件夹.. 首先要判断文件夹是否存在 ) --路径 ) --日期 例如: 20171011 SET @DATE=CAST(DATEPART(YYYY,GETDAT ...
- Git学习系列之 Git 、CVS、SVN的比较
Git .CVS.SVN比较 项目源代码的版本管理工具中,比较常用的主要有:CVS.SVN.Git 和 Mercurial (其中,关于SVN,请参见我的博客:SVN学习系列) 目前Google C ...
- 使用js命名空间进行模块式开发
在java中,为了防止命名冲突和模块式开发,会有个一个import 关键字来进行导包. 在js中为了达到同样的效果,我们也通过给其自定义一个“包”的概念. 直接上代码: 首先有个LC.js文件: // ...