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.常见框架的 ...
随机推荐
- machine learning data sets
http://archive.ics.uci.edu/ml/datasets.html 例如 3 分类 鸢尾花 数据集: http://archive.ics.uci.edu/ml/datasets/ ...
- Oracle Sql Loader的学习使用
最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看.点击 这里 查看详细 1,概述: Sql Loader: 一个批量工具,将文件数据导入到数据库.可以导入一个 ...
- freemarker语法介绍及其入门教程实例
# freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>#### 1.文本,直接输 ...
- oracle user_tables没有新创建的表的问题
oracle 新创建表后,在user_tables没有,在user_tab_columns也没有,暂时未找到办法
- 1131(★、※)Subway Map
思路:DFS遍历 #include <iostream> #include <map> #include <vector> #include <cstdio& ...
- OS&SYS&Shuti模块
#sys.argv 主要针对脚本可以读取参数 Shuti模块 import shutil f1=open('笔记',encoding='utf-8') f2=open('笔记2','w',enco ...
- FileProvider相关 Failed to find configured root that contains
问题: 使用FileProvider构造SD卡中文件uri时异常 java.lang.IllegalArgumentException: Failed to find configured root ...
- java 性能测试框架工具-junitperf
性能测试工具 对于 Java 开发者来说,要去学习性能测试工具未免很麻烦. 但有时候会有性能测试的需求. junitperf junitperf 就是一款为 Java 开发者设计的性能测试框架,如果你 ...
- 【Linux】【GIt】Linux下安装和配置Git(转)
yum安装 这里采用的是CentOS系统,如果采用yum安装git的方式: yum install git 很快就okay了,但是这里遇到一个问题.: 在网上搜寻了原因,说是要安装: yum inst ...
- vuejs如何在服务器部署
title: vuejs如何在服务器部署 date: 2017-10-31 20:41:03 tags: [vue] --- 上传到网站服务器 Vue 是一个 javascript 的前端框架,它是运 ...