Curator Framework的基本使用方法
Curator Framework提供了简化使用zookeeper更高级的API接口。它包涵很多优秀的特性,主要包括以下三点:
- 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题;可以watch NodeDataChanged event和获取updateServerList;Watches可以自动被Cruator recipes删除;
- 更干净的API:简化raw zookeeper方法,事件等;提供现代流式API接口
- Recipe实现:leader选举,分布式锁,path缓存,和watcher,分布式队列等。
Zookeeper在实际生产环境中应用比较广泛,比如SOA的服务监控系统,Hadoop,spark的分布式调度系统。Curator框架提供的优秀特性可以使得我们更加便捷的开发zookeeper应用。本文主要讲解了curator的基本使用方法。
CuratorFramework实例创建
Curator框架通过CuratorFrameworkFactory以工厂模式和builder模式创建CuratorFramework实例。 CuratorFramework实例都是线程安全的,我们应该当在ZooKeeper Cluster中共享同一个CuratorFramework实例。工厂方法newClient() 提供了简便创建client实例方式,使用start和close方法启动和关闭客户端。使用Curator框架创建客户端代码如下,
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework newClient=CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);
操作数据节点
zookeeper中,节点的组织类似于linux的文件系统,使用path来标识每个节点(znode),znode作为保存数据的容器,数据量限制在1M以内,这部分介绍如何使用curator框架创建,获取,更新,以及删除节点。
创建节点
Curator创建znode节点代码如下所示:
public void createNode(CuratorFramework newClient, String path, CreateMode createMode, String data) {
try {
newClient.create().withMode(createMode).forPath(path, data.getBytes());
} catch (Exception e) {
System.out.println("创建节点失败, elog=" + e.getMessage());
}
}
zookeeper中节点有两种类型,临时节点和永久节点,CreateMode类用于指定创建节点的类型,用户可以选择以下几个参数:
- CreateMode.PERSISTENT: 创建节点后,不删除就永久存在
- CreateMode.PERSISTENT_SEQUENTIAL:节点path末尾会追加一个10位数的单调递增的序列
- CreateMode.EPHEMERAL:创建后,回话结束节点会自动删除
- CreateMode.EPHEMERAL_SEQUENTIAL:节点path末尾会追加一个10位数的单调递增的序列
forPath函数指定创建节点的path和保存的数据,path的指定遵循linux文件path格式,创建node时指定的path,父path节点需要存在,否则创建节点失败,比如创建"/parent/child"节点,若不存在节点"parent",那么创建节点会失败。在znode中保存的数据需要进行序列化,用户可以选择使用JSON,XML,java内置的序列化机制,或者Hession以及Google的protocal Buffer等,为方便讲解,节点存储字符串数据。
获取节点数据
CuratorFramework提供getData函数,通过指定znode的path,就可以完成数据的获取。
public String getData(CuratorFramework newClient, String path){
try {
return new String(newClient.getData().forPath(path));
} catch (Exception e) {
System.out.println("获取数据失败, elog=" + e.getMessage());
}
return null;
}
更新节点
同样CuratorFramework提供setData函数,通过指定znode的path,可以完成数据的更新。
public void updateNodeDate(CuratorFramework newClient, String path, String data) {
try {
newClient.setData().forPath(path, data.getBytes());
} catch (Exception e) {
System.out.println("更新节点数据失败, elog=" + e.getMessage());
}
}
删除节点
和获取,更新节点类似,CuratorFramework提供delete函数,指定znode的path删除某一个节点。
public void deleteNode(CuratorFramework newClient, String path) {
try {
newClient.delete().forPath(path);
} catch (Exception e) {
System.out.println("删除节点失败, elog=" + e.getMessage());
}
}
Conclusion
本文和大家分享了CuratorFramework的基本使用方法,希望能对大家有所帮助。更多的使用方式可以参考官方给出的API文档。
Curator Framework的基本使用方法的更多相关文章
- Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。
http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加x ...
- .Net MVC5异步请求Entity Framework 无限循环解决方法
.Net MVC5异步请求Entity Framework 无限循环解决方法 Entity Framework 存在一对多.多对多之间的关系,相互依赖,在返回JSON数据时往往会出现相互引用造成的无限 ...
- java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded()Lorg/apache/curator/framework/api/ProtectACLCreateModeStatPathAndBytesable;
1 错误信息 java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIf ...
- zookeeper连接 org.apache.curator.framework.imps.CuratorFrameworkImpl Background exception was not retry-able or retry gave up [main-EventThread]
ERROR org.apache.curator.framework.imps.CuratorFrameworkImpl Background exception was not retry-able ...
- Win10离线安装.NET Framework 3.5的方法补充(附cab格式离线安装包下载) - 转载
MS酋长很早以前已经分享了<Win10离线安装.NET Framework 3.5的方法技巧>,同时分享了exe格式的.NET Framework 3.5离线安装包下载地址.但有部分网友反 ...
- robot framework 特点及安装方法
最近准备给组内成员分享一下前一个项目组所用到的一个接口自动化测试框架-robot framework,所以又稍微整理了一下,顺便也给大家分享一下. 一:特点 1.robot framework 是py ...
- windows无法安装.net framework 3.5解决方法
windows server 12r2 或 win10 安装.netframework 3.5方法: 一. 直接在“启用或关闭windows功能”中可以启用,需联网.但是经常会出错,可能安装过程中需要 ...
- Entity Framework优缺点及使用方法总结
Entity Framework是M$提供的一个ORM框架,它旨在为小型应用程序中数据层的快速开发提供便利. nuget上185W多的下载量,说明.Net开发人员还是比较喜欢用EF的.但是EF在提供了 ...
- Win8系统安装NET Framework 3.5的方法
1)找到下载过的Win8系统盘,解压到某个目录下,例如 F:, 找到解压的系统盘目录中"sources\sxs"文件夹 2)以管理员身份运行cmd命令,执行下面的命令: dism. ...
随机推荐
- 一次mongodb 统计需求
需求: 临下班运营的同事发来了一个需求,要统计数据库里某个collection的所有document 中某个字段(_id)出现的次数._id 字段的范围是0-4000. 假设collection 是这 ...
- C++ 系列:虚函数
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- 安装Python环境时遇到的问题
问题描述:An error occurred during the installation of assembly 'Microsoft.VC90.MFC,version="9.0.210 ...
- JAVA内部类有关
最近在看单例模式的实现,看到有一种利用JAVA静态内部类的特性来实现,对于内部类我还真是不了解,遂了解了一下,代码贴上. /** * 内部类分为:成员内部类.局部内部类.匿名内部类和静态内部类. */ ...
- android中如何用代码来关闭打开的相机
场景描述: 比如你再应用中打开了系统相机,然后需要在几分钟后自动关闭这个系统相机(不是手动关闭) 1.在activityA中利用startActivityForResult(intent,reques ...
- python遍历一个网段的ip地址
def ip2num(ip):#ip to int num lp = [int(x) for x in ip.split('.')] return lp[0] << 24 | lp[1] ...
- 使用IntelliJ IDEA 配置Maven(入门)【转】
1.在IntelliJ IDEA中配置maven 打开-File-Settings 2.新建maven WEB项目 打开-File-New-Project 点击NEXT 点击NEXT 添加的配置 ...
- Android 照相 滤镜
android-image-filter 19种相片滤镜,使用也简单,all filters in file BitmapFilter.java : Bitmap newBitmap = Bitmap ...
- 一些牛逼哄哄的javascript面试题
今天我们来对这5个题目详细分析一下,希望对大家有所帮助. 注: 问题来自大名鼎鼎的前端架构师Baranovskiy的帖子<So, you think you know JavaScript?&g ...
- 关于px、em和rem的学习笔记!
刚参加前端工作,字体一般使用px来设置大小,在处理响应式界面时对字体的大小变化处理感觉很吃力,得知对字体的大小有三种大小格式设置方式,便想一探究竟,希望可以有所帮助! px px像素(Pixel),相 ...