Curator框架基础使用
为了更好的实现java操作zookeeper服务器。后来出现Curator框架,非常强大,目前已经是Apache的顶级项目,有丰富的操作,,例如:session超时重连,主从选举。分布式计数器,分布式锁,等等适用于各种复杂的zookeeper场景api封装
maven依赖
<dependency>
<groupld>org.apache.curator</groupld>
<artifactld>curator-framewprk</artifactld>
<version>2.4.2</version>
</dependency>
Curator 框架中使用链式变成风格,易读性更强,使用工程方法创建连接对象。
1.使用CuratorFrameworkFactory 的两个静态工厂方法(参数不同) 来实现:
参数1:connectString ,连接串
参数2:retryPolicy 重试连接策略,有四种实现,分别为:ExponentialBackoffRetry, RetryNtimes,RetryOneTimes ,RetryUntilElapsed
参数3:sessionTimeoutMs 会话超时时间,默认为60 000ms
参数4:connectionTimeoutMs 连接超时时间,默认为15 000ms
注意,对于RetryPolicy策略通过一个接口来让用户自定义实现
2.创建节点create方法,可选链式:
creatingParentslfNeeded、withMode、forPath、withACL等
3、删除节点delete方法,可选链式项
deletingClildrenlfNeeded、guaranteed、withVersion 、forPath等
4、读取和修改数据getData、setData方法
5、异步绑定回调方法,比如创建节点时绑定一个回调函数,该回调函数可以输出服务器状态码以及服务器事件类型,还可以加入一个线程池进行优化操作,
6、读取子节点方法getChildren
7、判断节点是否存在方法checkExists
package bjsxt.curator.base; import java.util.List; import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.ZooKeeper.States;
import org.apache.zookeeper.data.Stat; public class CuratorBase { /** zookeeper地址 */
static final String CONNECT_ADDR = "192.168.2.2:2181";
/** session超时时间 */
static final int SESSION_OUTTIME = 5000;// ms public static void main(String[] args) throws Exception { // 1 重试策略:初试时间为1s 重试10次
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
// 2 通过工厂创建连接
CuratorFramework cf = CuratorFrameworkFactory.builder()
.connectString(CONNECT_ADDR).sessionTimeoutMs(SESSION_OUTTIME)
.retryPolicy(retryPolicy)
// .namespace("super")
.build();
// 3 开启连接
cf.start(); System.out.println(States.CONNECTED);
System.out.println(cf.getState()); // 新加、删除 // 4 建立节点 指定节点类型(不加withMode默认为持久类型节点)、路径、数据内容
/**
* cf.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
* .forPath("/super/c1", "c1内容".getBytes());
*/
// 5 删除节点
/**
* cf.delete().guaranteed().deletingChildrenIfNeeded().forPath("/super")
* ;
*/
// 读取、修改 // 创建节点
/**
* cf.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
* .forPath("/super/c1", "c1内容".getBytes());
* cf.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
* .forPath("/super/c2", "c2内容".getBytes());
*/
// 读取节点
/**
* String ret1 = new String(cf.getData().forPath("/super/c2"));
* System.out.println(ret1); // 修改节点 cf.setData().forPath("/super/c2",
* "修改c2内容".getBytes()); String ret2 = new
* String(cf.getData().forPath("/super/c2")); System.out.println(ret2);
*/ // 绑定回调函数 /**
* ExecutorService pool = Executors.newCachedThreadPool();
* cf.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
* .inBackground(new BackgroundCallback() {
*
* @Override public void processResult(CuratorFramework cf, CuratorEvent
* ce) throws Exception { System.out.println("code:" +
* ce.getResultCode()); System.out.println("type:" +
* ce.getType()); System.out.println("线程为:" +
* Thread.currentThread().getName()); } },
* pool).forPath("/super/c3", "c3内容".getBytes());
* Thread.sleep(Integer.MAX_VALUE);
*/ // 读取子节点getChildren方法 和 判断节点是否存在checkExists方法 List<String> list = cf.getChildren().forPath("/super");
for (String p : list) {
System.out.println(p);
} Stat stat = cf.checkExists().forPath("/super/c3");
System.out.println(stat); Thread.sleep(2000);
cf.delete().guaranteed().deletingChildrenIfNeeded().forPath("/super"); // cf.delete().guaranteed().deletingChildrenIfNeeded().forPath("/super"); }
}
Curator框架基础使用的更多相关文章
- Hibernatel框架基础使用
Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...
- Struts2框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- Curator框架的使用
Curator框架的目的是减少用户的复杂度,毕竟原生的Zookeeper难以使用. 这里举一个使用例子. 第一步:建立连接 // 以下代码与192.168.1.101:2181建立了连接Curator ...
- 框架基础之Hibernate简介
框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...
- ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
- Python云端系统开发入门——框架基础
Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...
- 如何基于Winform开发框架或混合框架基础上进行项目的快速开发
在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
随机推荐
- PHP发送POST请求
方式一:cURL $url = "localhost/test/post/service.php"; $data = array("a"=>"网 ...
- web driver下载地址(selenium-3.141_浏览器版本对应)
web driver: (Windows环境下) Firefox(上一目录可以找其他浏览器的driver) : 1)http://npm.taobao.org/mirrors/geckodriver/ ...
- 将文本转化为Numpy的矩阵
def file2matrix(filename): fr = open(filename) numberOfLines = len(fr.readlines()) #get the number o ...
- 在linux中编译grpc
环境: centos_7_x86_x64 一.下载 1)下载grpc源代码:grpc-1.2.0.zip 2)下载grpc依赖库: 1)benchmark-master.zip 2)boringssl ...
- PythonStudy——函数的导入 Import of functions
# 函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数# 难点:如何定义个函数 # 现实中很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名# = ...
- <a>标签里的函数事件写法的实战建议
如果在实际应用中确实是要用到标签来响应onclick事件的, 那么就建议使用下面三种方法 <a href="javascript:void(0);" onclick=&quo ...
- 斐讯自动下单抢购V1.3.4【自动验证码识别】
20180530 更新 V1.3.41.增加有货下单:替代定时下单 20180519 更新 V1.3.31.增加订单满减优惠:支付宝每单立减5元2.修改商城域名及下单速度 功能介绍1.斐讯商城抢购专用 ...
- NFC应用于公交卡
NFC应用于公交卡https://www.cnblogs.com/liuzhaoyzz/p/7115098.html 带有NFC功能的安卓手机可以给实体公交卡充值,手机虚拟公交卡现在有两种方案,一种是 ...
- STS启动时卡在loading加载 dashboard.ui
如果你在用STS 3.4或3.5,启动时可能会卡在 解决方法:打开STS安装目录下的plugins目录,删除文件 org.springsource.ide.eclipse.dashboard.ui_3 ...
- 测试WCF遇到的一些问题
win7+iis7 1.localhost访问bad request错误. 主机地址不要指定为127.0.0.1.设置为”全部未分配“. 2.错误 500.19(由于权限不足而无法读取配置文件)的问题 ...