zk 08之:Curator之一:zk客户端Curator

Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端编程。

它包含以下几个组件:

Componentdescription
RecipesImplementations of some of the common ZooKeeper “recipes”. The implementations are built on top of the Curator Framework.
FrameworkThe Curator Framework is a high-level API that greatly simplifies using ZooKeeper. It adds many features that build on ZooKeeper and handles the complexity of managing connections to the ZooKeeper cluster and retrying operations.
UtilitiesVarious utilities that are useful when using ZooKeeper.
ClientA replacement for the bundled ZooKeeper class that takes care of some low-level housekeeping and provides some useful utilities.
ErrorsHow Curator deals with errors, connection issues, recoverable exceptions, etc.
ExtensionsThe curator-recipes package implements the common recipes that are described in the ZooKeeper documentation. To avoid bloating that package, recipes/applications that have a vertical appeal will be put in separate “extension” packages using the naming convention curator-x-name.

 

示例:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><groupId>com.sf.zkclient</groupId><artifactId>zkclient</artifactId><version>0.0.1-SNAPSHOT</version><name>zkclient</name><url>http://maven.apache.org</url><properties><curator.version>2.11.1</curator.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.8</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>${curator.version}</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-client</artifactId><version>${curator.version}</version><exclusions><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.0</version></dependency>
</dependencies>
</project>

java代码:

示例一:常见的添加、修改、删除示例:

public static void test() throws Exception {String address = "localhost:2181";CuratorFramework client = CuratorFrameworkFactory.newClient(address, new ExponentialBackoffRetry(1000, 3));try{client.start();String path = "/yongjiu2/yongjiu3/test5";//a. 创建永久性节点
            client.create().creatingParentContainersIfNeeded().withMode(CreateMode.PERSISTENT).withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE).forPath(path, "hello, zk".getBytes());System.out.println("b");//b. 创建临时节点client.create().withMode(CreateMode.EPHEMERAL).forPath("/temptest5", "hello".getBytes());  System.out.println("c");//c.获取节点值byte[] buf = client.getData().forPath(path);System.out.println("get data path:"+path+", data:"+new String(buf));System.out.println("d");//d.设置节点值client.setData().inBackground().forPath(path, "ricky".getBytes());System.out.println("e");//e.checkExistsStat stat = client.checkExists().forPath(path);if(stat==null){System.out.println("exec create path:"+path);}else {System.out.println("exec getData");}System.out.println("f");//f.删除节点
            client.delete().deletingChildrenIfNeeded().forPath(path);byte[] buf2 = client.getData().forPath(path);System.out.println("get data path:"+path+", data:"+new String(buf2));}finally {if(client!=null)client.close();}}

示例二:临时节点不能有子节点、不能级联创建示例:

/*** 级联创建临时节点测试,结果会创建不成功,报错* @throws Exception*/public static void test2() throws Exception {String address = "localhost:2181";CuratorFramework client = CuratorFrameworkFactory.newClient(address, new ExponentialBackoffRetry(1000, 3));try{client.start();String path = "/linshi";//b. 创建临时节点client.create().withMode(CreateMode.EPHEMERAL).forPath(path, "hello".getBytes());  byte[] buf = client.getData().forPath(path);System.out.println("get data path:"+path+", data:"+new String(buf));//Zookeeper创建临时节点的时候,不能创建级联的节点,下面的create会报错String path2 = "/linshi/test";//b. 创建临时节点client.create().withMode(CreateMode.EPHEMERAL).forPath(path2, "hello".getBytes());  //byte[] buf2 = client.getData().forPath(path2);//System.out.println("get data path:"+path2+", data:"+new String(buf2));
            TimeUnit.SECONDS.sleep(100 * 1000);}finally {if(client!=null)client.close();}}

示例三:3、临时节点何时失效演示(在会话结束时被移除)

/*** 临时节点什么时候失效?是在本次会话结束时* @throws Exception*/public static void test3() throws Exception {String address = "localhost:2181";CuratorFramework client = CuratorFrameworkFactory.newClient(address, new ExponentialBackoffRetry(1000, 3));try{client.start();String path = "/linshi";//b. 创建临时节点client.create().withMode(CreateMode.EPHEMERAL).forPath(path, "hello".getBytes());  byte[] buf = client.getData().forPath(path);System.out.println("get data path:"+path+", data:"+new String(buf));TimeUnit.SECONDS.sleep(100 * 1000);}finally {if(client!=null)client.close();}}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之调用微信登陆、分享、支付

转载&#xff1a;http://blog.csdn.net/lowprofile_coding/article/details/48086381 前言:用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到…

两年发表14篇论文,其中10篇一作,这是她的科研进阶攻略

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;浙江大学两年发表14篇论文&#xff0c;其中一作10篇&#xff0c;包括4篇Top SCI&#xff0c;2篇SCI和4篇EI&#xff1b;持有2项发明专利&#xff0c;出版1部英文专著&#xff0c;斩获2020年度学生学术十大新成果奖第…

生活在任务栏的猫, CPU使用率越高它就跑的越快

生活在任务栏的猫, CPU使用率越高它就跑的越快Runcat 是一个桌面软件, 这只猫会显示在您的任务栏上面, 它会一直奔跑, 它的运行速度取决于CPU的使用率, 支持 Windows 和 Mac 平台。您还可以用它查看系统资源使用率, 包括CPU使用率,内存,电池状态,网络传输速度等。如果这只猫一直…

在Ant的javac中指定源文件编码方式,以避免警告: 编码 GBK 的不可映射字符的错误...

为什么80%的码农都做不了架构师&#xff1f;>>> * 该错误会造成源文件中的字符串出现混乱&#xff0c;从而影响indexOf()之类函数的正常功能&#xff0e; <javac srcdir"${common.src.dir}" destdir"${build.temp.common.classes.dir}" de…

现在要吃软饭的,都这么明目张胆了吗?

1 加我一个&#xff1f;▼2 为什么电梯里会有两只光着的右脚&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼这样&#xff1f;3 老爹的脸更黑了▼4 但也不影响吧&#xff1f;都不及格▼5 妈&#xff0c;你说的一点都没错&#xff01;&#xff08;素材来源网络&…

Android之app引导页(背景图片切换加各个页面动画效果)

转载&#xff1a;http://blog.csdn.net/lowprofile_coding/article/details/48037095 先看效果图: 1.显示三个页面的Activity 用view pager去加载三个fragment实现,控制点点点的切换,监听view pager的切换,控制fragment动画的开始跟结束,重写了view pager,实现了背景图片的移…

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

手把手教你学Dapr - 9. 可观测性

介绍通过Tracing(跟踪)、Metrics(指标)、Logs(日志)和Health(运行状况)监控应用程序。分布式跟踪Dapr 使用 Zipkin 协议进行分布式跟踪 和 Metrics 收集。由于 Zipkin 协议的普遍性&#xff0c;许多后端都是开箱即用的&#xff0c;例如 Stackdriver、Zipkin、New Relic 等。结合…

这些魔术用的是物理原理?有啥诀窍?

全世界只有3.14 % 的人关注了爆炸吧知识许多成功的魔术&#xff0c;都运用了物理知识。我们在观看魔术表演时&#xff0c;也可以学到相当多的知识&#xff0c;有时用一般的原理就可以表演一个十分精彩的魔术。所以我们希望揭开魔术的神秘面纱&#xff0c;探究其中的物理知识。一…

安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法

可能有的朋友在运行某软件时&#xff0c;会出现了“无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。”的提示,遇到这样的情况该怎么办呢&#xff1f;不用着急&#xff0c;下面小编就为大家带来解决方法&#xff0c;遇到同样问题却不知道如何解…

OAuth 2.0 扩展协议之 PKCE

前言阅读本文前需要了解 OAuth 2.0 授权协议的相关内容&#xff0c; 可以参考我的上一篇文章 OAuth 2.0 的探险之旅[1]。PKCE 全称是 Proof Key for Code Exchange&#xff0c; 在2015年发布&#xff0c; 它是 OAuth 2.0 核心的一个扩展协议&#xff0c; 所以可以和现有的授权模…

欧洲杯直播助PPTV日均流量登顶视频行业首位

随着意大利溃败&#xff0c;西班牙最终捧杯&#xff0c;四年一度火爆的欧洲杯赛事也就此落下帷幕。令人欣喜的是&#xff0c;在本届欧洲杯比赛的直播过程中&#xff0c;由于比赛安排再深夜&#xff0c;互联网应用取代传统电视台成为人们观看赛事的主要渠道&#xff0c;各大视频…

.NET 6新特性试用 | record struct

前言在以前的文章中&#xff0c;我们介绍过record类型&#xff0c;它具有不变性(《为什么应该用record来定义DTO》)和值相等性(《为什么应该用record来定义DTO&#xff08;续&#xff09;》)。record是引用类型。而在.NET 6中&#xff0c;我们可以使用record struct定义值类型。…

原来我们看到的世界地图竟这样震撼!多年的地理白学了...

▲ 点击查看几乎每个家庭都会有两张地图&#xff1a;一张世界地图&#xff0c;一张中国地图。薄薄的两张纸&#xff0c;蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长&#xff0c;也是300多年来唯一一位女校长德鲁吉尔平福斯特&#xff08;Drew Gilpin Faust&#x…

Exchange Powershell查看用户最后登陆邮箱时间

在Exchange日常管理中&#xff0c;我们可能经常会遇到这样的问题&#xff0c;就是怎么来知道一个用户最后的登录时间&#xff1f;这个问题在使用Exchange powershell就能很好的解决了。 用管理员身份运行Exchange management powershell 查看某一个邮箱数据库的统计信息&#x…

易企秀制作的步骤

2019独角兽企业重金招聘Python工程师标准>>> 1、选图很关键 &#xff08;图片干净 整洁&#xff0c;不同方位展示 &#xff0c;符合主题&#xff09;。 2、配上说明性文字 简明扼要 3、选择合适的模板和背景音乐。 4、及时沟通与调整。 转载于:https://my.oschina.n…

C# WPF MVVM模式Prism框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信&#xff0c;Prism提供了一种事件机制&#xff0c;可以在应用程序中低耦合的模块之间进行通信&#xff0c;该机制基于事件聚合器服务&#xff0c;允许发布者和订阅者之间通过事件进行通讯&#xff0c;且彼此之…

这几部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了几部高分经典学科纪录片&#xff0c;对应文学、数学、经济学、地理、化学。这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年…

Linux 学习_在Linux下面安装tomcat

要在linux下面安装tomcat&#xff0c;首先我们需要做一些准备工作.... 下载tomcat&#xff1a; 下载地址&#xff1a;http://tomcat.apache.org/download-60.cgi 下载&#xff1a;tar.gz 如图&#xff1a; 说明&#xff1a; WinISO安装版&#xff1a;下载地址&#xff1a;http…

Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

题目链接&#xff1a;点击打开链接 题意&#xff1a; 给定T表示case数 以下4行是一个case 每行2个点&#xff0c;u v 每次u能够绕着v逆时针转90 问最少操作多少次使得4个u构成一个正方形。 思路&#xff1a; 枚举判可行 #include <iostream> #include <cmath> #inc…