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 ...
随机推荐
- mybatis的CRUD实例(三)
前面的文章我们已经实现了根据id查询用户信息的功能,下面我们进行其他业务功能的实现. 一.根据用户名模糊查询用户列表 查询使用的sql : select * from user where usern ...
- L2-2 小字辈 (25 分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...
- 使用docker部署STF服务(CentOS环境)
一.安装docker环境 更新软件 sudo yum update 执行安装 sudo yum install docker 查看docker镜像 sudo docker images 二.拉取相关镜 ...
- zabbix4.2 安装
官网https://www.zabbix.com/cn/download a. 安装 数据库rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86 ...
- php中die(),exit(),return的区别
die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...
- Go语言小试牛刀---几个简单的例子
整理资料,发现之前手写的Go语言资料,现在贴过来. 第一个:Channel的使用,创建一个随机数 package main import "fmt" import "ru ...
- 案例20-页面使用redis缓存显示类别菜单
1 准备工作 1 需要导入所需要的jar包. 2 启动windows版本的redis服务端 3 准备JedisUtils工具类的配置文件redis.properties redis.maxIdle= ...
- android 模块化
android 插件化 模块化开发(apkplug): http://blog.csdn.net/o1587790525/article/details/11891997 android 模块化环境搭 ...
- mysql修改表名
mysql修改表名 SQL语句为: alter table table_name rename to new_table_name 参考:http://blog.csdn.net/xrt95050/a ...
- [转]Entity Framework Sprocs with Multiple Result Sets
本文转自:https://msdn.microsoft.com/en-us/data/jj691402.aspx Entity Framework Sprocs with Multiple Resul ...