为了更好的实现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框架基础使用的更多相关文章

  1. Hibernatel框架基础使用

    Hibernatel框架基础使用 1.简介 1.1.Hibernate框架由来 Struts:基于MVC模式的应用层框架技术 Hibernate:基于持久层的框架(数据访问层使用)! Spring:创 ...

  2. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. Curator框架的使用

    Curator框架的目的是减少用户的复杂度,毕竟原生的Zookeeper难以使用. 这里举一个使用例子. 第一步:建立连接 // 以下代码与192.168.1.101:2181建立了连接Curator ...

  5. 框架基础之Hibernate简介

    框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...

  6. ThinkPHP框架基础

    ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...

  7. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

  8. 如何基于Winform开发框架或混合框架基础上进行项目的快速开发

    在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...

  9. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

随机推荐

  1. BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

    BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...

  2. (28)django的中间件(自定义中间件和防范跨站请求伪造攻击)-重要的概念

    Django中间件和中间件不是同一种东西 什么是中间件:中间件是一个很大的概念,只要程序和程序之间还有一层程序,用来处理两个程序的整个交互过程的请求.数据等等就叫中间件 Django中间件:是介于re ...

  3. WPF中获取控件默认样式和模板XML

    从微软官方找这个东西甚是困难,似乎根本没有提供.网上说因为版本问题,很难找到,但通过代码却可以轻易获得.经测试,生成的样式文件非常完美,完全不用修改即可应用. 代码如下: public static ...

  4. 第一章 HTML+CSS(上)

    HTML 网页的组成 HTML简介 HTML的语法 HTML的常用标签 HTML中的表格和表单 CSS的简单应用 我们这里使用WebStorm开发工具 配置浏览器 常用插件: CodeGlance 代 ...

  5. Docker入门与实战讲解

    转载自:http://blog.csdn.net/relax_hb/article/details/69668815 简述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包 ...

  6. centos7下安全访问远程服务器

    1. 添加普通账号 众所周知,linux下的root拥有最高权限,可以执行任何命令.在使用root身份操作时,有时的一个不注意就可能将非常重要的删除(最可怕的是 rm -rf /).而linux不像w ...

  7. 6.8 出口条件循环:do while

    while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容.C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代 ...

  8. SWD通讯

    这几日看到坛里有几个关于SWD协议相关的文章,自己也尝试了下,有点体会,也有些疑惑,写出来与大家分享和交流下.    以下我的模拟SWD接口的板子简称为Host,目标MCU(即我要连接的板子)简称为T ...

  9. python之路——11

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 学习内容 一.装饰器 1.时间模块 time.time time.sleep 2.装饰器 原则---开放封闭 ...

  10. postgresql数据库3种程序(rule,trigger ,FUNCTION )

    1. CREATE [ OR REPLACE ] RULE name AS ON event TO table_name [ WHERE condition ] DO [ ALSO | INSTEAD ...