为了更好的实现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. 学习笔记TF017:自然语言处理、RNN、LSTM

    自然语言处理 (NLP)问题都是序列化的.前馈神经网络,在单次前馈中对到来数据处理,假定所有输入独立,模式丢失.循环神经网络(recurrent neural network,RNN)对时间显式建模神 ...

  2. Java面向对象 第6节 异常

    一.认识异常 异常是指在程序运行过程中所发生的不正常事件,如文件找不到.网络连接不通或链接中断.算数运算出错.数组下标越界.装在一个不存在的类.对null对象操作.类型转换异常等.异常会中断正在运行的 ...

  3. DBLinq (MySQL exactly) Linq To MySql(转)

    Linq to SQL很好用,可惜只支持Microsoft SQL Server 和Microsoft SQL Server Compact Edition,目前比较成熟的免费解决方法是DBLinq( ...

  4. [转]golang的goroutine调度机制

    golang的goroutine调度机制 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一直对goroutine的调度机制很好奇最近在看雨痕的golang源码分析基于go ...

  5. Linux之ls

    命令功能: ls是list的简写,列出目录下的内容 命令格式: ls [OPTION]... [FILE]... 命令参数: -a,--all    不忽略以“.”开头的隐藏文件 -A, --almo ...

  6. Scrapy学习篇(十二)之设置随机IP代理(IPProxy)

    当我们需要大量的爬取网站信息时,除了切换User-Agent之外,另外一个重要的方式就是设置IP代理,以防止我们的爬虫被拒绝,下面我们就来演示scrapy如何设置随机IPProxy. 设置随机IPPr ...

  7. api.js封装请求

    1. 传入对象格式如 { a:{ getData:{ url: 'xx/xx/xx', method: 'get', require:['id', 'name'], // 简单检查 必传参数确实则不发 ...

  8. 01-简单编写http服务器

    package com.day3; import java.io.IOException; import java.io.InputStream; import java.net.ServerSock ...

  9. 用GDB调试程序(二)

    GDB的命令概貌——————— 启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> g ...

  10. Android 梯形进度条、下载进度条;

    额,Gif有点卡: 梯形.矩形.圆角.背景色.前景色.进度条中的文字都可以改: <?xml version="1.0" encoding="utf-8"? ...