Zookeeper的java客户端API使用方法(五)
前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等。这篇博文我们重点来看下Zookeeper的java客户端API使用方式。
创建会话
客户端可以通过创建一个Zookeeper(org.apache.zookeeper.ZooKeeper)实例来连接ZooKeeper服务器。给大家推荐一篇博文,构造方法和参数都介绍的非常的详细,看一下就好。
我们看一下建立会话的代码就好了。
public class CreateSession implements Watcher{
private static ZooKeeper zookeeper;
//创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册)
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateSession());
System.out.println(zookeeper.getState());
Thread.sleep(Integer.MAX_VALUE);
}
private void doSomething(){
System.out.println("do something");
}
@Override
public void process(WatchedEvent event) {
System.out.println("Receive watched event:" + event);
if(event.getState() == KeeperState.SyncConnected){
System.out.println("ZooKeeper session established.");
doSomething();
}
}
}
需要我们注意就一点:ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
zookeeper的所有的API,都有同步和异步两种方式,使用异步API时,client可为每个operation设置callback,在operation被执行后,zookeeper会执行对应的callback。
下面给大家展示一下两个方式创建节点的不同。
同步创建节点
public class CreateNodeSync implements Watcher{
private static ZooKeeper zookeeper;
//创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册)
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateNodeSync());
System.out.println(zookeeper.getState());
Thread.sleep(Integer.MAX_VALUE);
}
/**
* 创建Znode
* CreateMode:
* PERSISTENT (持续的,相对于EPHEMERAL,不会随着client的断开而消失)
* PERSISTENT_SEQUENTIAL(持久的且带顺序的)
* EPHEMERAL (短暂的,生命周期依赖于client session)
* EPHEMERAL_SEQUENTIAL (短暂的,带顺序的)
*/
private void doSomething(){
try {
String path = zookeeper.create("/node_2", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("return path:" + path);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("do something");
}
@Override
public void process(WatchedEvent event) {
System.out.println("Receive watched event:" + event);
if(event.getState() == KeeperState.SyncConnected){
doSomething();
}
}
}
异步创建节点
public class CreateNodeASync implements Watcher {
private static ZooKeeper zookeeper;
//创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册)
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateNodeASync());
System.out.println(zookeeper.getState());
Thread.sleep(Integer.MAX_VALUE);
}
private void doSomething() {
zookeeper.create("/node_1", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,
new IStringCallback(), "this is content");
System.out.println("do something");
}
@Override
public void process(WatchedEvent event) {
System.out.println("Receive watched event:" + event);
if (event.getState() == KeeperState.SyncConnected) {
doSomething();
}
}
static class IStringCallback implements AsyncCallback.StringCallback {
@Override
public void processResult(int rc, String path, Object ctx, String name) {
System.out.println("rc:" + rc);
System.out.println("path:" + path);
System.out.println("ctx:" + ctx);
System.out.println("name:" + name);
}
}
}
他们的运行结果就不再给大家展示了,篇幅会比较大,我对API对zookeeper节点增删改查,都做了同步和异步的编写,大家可以在下面的链接地址中下载。
下载
下载地址:http://download.csdn.net/detail/jiuqiyuliang/9758784
总结:
- 在这里api对zookeeper节点进行增删改查,有同步和异步的方
- zookeeper不支持递归创建子节点(也就是说在父节点不存在的情况下,不允许创建子节点)
- zookeeper不支持递归删除(也就是说在父节点有子节点的情况下,不允许直接删除父节点)
下篇博文,我们进行zookeeper的实战部分。
Zookeeper的java客户端API使用方法(五)的更多相关文章
- 13.Zookeeper的java客户端API使用方法
转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027
- zookeeper的Java客户端API
zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- 六:ZooKeeper的java客户端api的使用
一:客户端链接测试 package com.yeepay.sxf.createConnection; import java.io.IOException; import org.apache.zoo ...
- 12. ZooKeeper之Java客户端API使用—创建会话。
转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...
- 02.ZooKeeper的Java客户端使用
1.ZooKeeper常用客户端比较 1.ZooKeeper常用客户端 zookeeper的常用客户端有3种,分别是:zookeeper原生的.Apache Curator.开源的zkclie ...
- JAVA客户端API调用memcached两种方式
1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...
- Java客户端API
添加依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...
随机推荐
- 三星a9上测试egret与pixi.js的渲染性能
for (let i = 0; i < 500; i++) { let shape = new egret.Shape(); shape.graphics.beginFill(0xff0000) ...
- bower安装和使用
bower的安装 1,首先在我的系统 安装 nodejs.因为我的系统是windows,还需要安装msysgit,注意图二中的选项 msysgit Git setup 2,之后就可以用npm包 ...
- 一本通1646GT 考试
1646:GT 考试 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 阿申准备报名参加 GT 考试,准考证号为 n 位数 X1X2⋯Xn(0≤Xi≤9),他不 ...
- linux 命令大全,我去
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- Good Bye 2018 没打记
场外选手赛时只口胡出了CD感觉非常惨.只看了E并且还没看到题面里的wiki我能咋办 C:f只与gcd(n,k)有关. D:考虑每种起始位置,对于跨越的两个排列,只有前一个排列的后缀单减时不产生贡献.答 ...
- SECD machine
SECD machine 对程序语言理论的理解 程序语言理论主要研究语法.语义及语言的实现.编程语言有语法,各种数学逻辑.结构化数据都有语法.乔姆斯基的语言体系及巴科斯范式是语法分析的基础,语法分析将 ...
- (转)CS0016: 未能写入输出文件
转自:http://www.pageadmin.net/article/20130305/537.html 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息 ...
- MT【199】映射的个数
(2018中科大自招)设$S=\{1,2,3,4,5\}$则满足$f(f(x))=x$的映射:$S \longrightarrow S$的个数____解答:由于$a\ne b$时必须满足$f(a)=b ...
- 【题解】 [POI2012]FES-Festival (差分约束)
懒得复制题面,戳我戳我 Question: (因为网上找不到好的翻译,这里简单复述一下) 告诉你\(m1+m2\)个约束条件,然后要你找出\(X_1-X_n\)这些数字,求满足要求的数列中不同的数字个 ...
- 【跟我学apache-commons】【四】commons-io的使用
commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码.从common-io的官方使用文档可以看出,它主要分为工具类.尾端类.行迭代器 ...