14.ZooKeeper Java API 使用样例
转自:http://www.aboutyun.com/thread-7332-1-1.html
package com.taobao.taokeeper.research.sample; import java.io.IOException;
import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper; import common.toolkit.java.util.ObjectUtil; /**
* ZooKeeper Java Api 使用样例<br>
* ZK Api Version: 3.4.3
*
* @author nileader/nileader@gmail.com
*/
public class JavaApiSample implements Watcher { private static final int SESSION_TIMEOUT = 10000;
private static final String CONNECTION_STRING = "test.zookeeper.connection_string:2181";
private static final String ZK_PATH = "/nileader";
private ZooKeeper zk = null; private CountDownLatch connectedSemaphore = new CountDownLatch( 1 ); /**
* 创建ZK连接
* @param connectString ZK服务器地址列表
* @param sessionTimeout Session超时时间
*/
public void createConnection( String connectString, int sessionTimeout ) {
this.releaseConnection();
try {
zk = new ZooKeeper( connectString, sessionTimeout, this );
connectedSemaphore.await();
} catch ( InterruptedException e ) {
System.out.println( "连接创建失败,发生 InterruptedException" );
e.printStackTrace();
} catch ( IOException e ) {
System.out.println( "连接创建失败,发生 IOException" );
e.printStackTrace();
}
} /**
* 关闭ZK连接
*/
public void releaseConnection() {
if ( !ObjectUtil.isBlank( this.zk ) ) {
try {
this.zk.close();
} catch ( InterruptedException e ) {
// ignore
e.printStackTrace();
}
}
} /**
* 创建节点
* @param path 节点path
* @param data 初始数据内容
* @return
*/
public boolean createPath( String path, String data ) {
try {
System.out.println( "节点创建成功, Path: "
+ this.zk.create( path, //
data.getBytes(), //
Ids.OPEN_ACL_UNSAFE, //
CreateMode.EPHEMERAL )
+ ", content: " + data );
} catch ( KeeperException e ) {
System.out.println( "节点创建失败,发生KeeperException" );
e.printStackTrace();
} catch ( InterruptedException e ) {
System.out.println( "节点创建失败,发生 InterruptedException" );
e.printStackTrace();
}
return true;
} /**
* 读取指定节点数据内容
* @param path 节点path
* @return
*/
public String readData( String path ) {
try {
System.out.println( "获取数据成功,path:" + path );
return new String( this.zk.getData( path, false, null ) );
} catch ( KeeperException e ) {
System.out.println( "读取数据失败,发生KeeperException,path: " + path );
e.printStackTrace();
return "";
} catch ( InterruptedException e ) {
System.out.println( "读取数据失败,发生 InterruptedException,path: " + path );
e.printStackTrace();
return "";
}
} /**
* 更新指定节点数据内容
* @param path 节点path
* @param data 数据内容
* @return
*/
public boolean writeData( String path, String data ) {
try {
System.out.println( "更新数据成功,path:" + path + ", stat: " +
this.zk.setData( path, data.getBytes(), -1 ) );
} catch ( KeeperException e ) {
System.out.println( "更新数据失败,发生KeeperException,path: " + path );
e.printStackTrace();
} catch ( InterruptedException e ) {
System.out.println( "更新数据失败,发生 InterruptedException,path: " + path );
e.printStackTrace();
}
return false;
} /**
* 删除指定节点
* @param path 节点path
*/
public void deleteNode( String path ) {
try {
this.zk.delete( path, -1 );
System.out.println( "删除节点成功,path:" + path );
} catch ( KeeperException e ) {
System.out.println( "删除节点失败,发生KeeperException,path: " + path );
e.printStackTrace();
} catch ( InterruptedException e ) {
System.out.println( "删除节点失败,发生 InterruptedException,path: " + path );
e.printStackTrace();
}
} public static void main( String[] args ) { JavaApiSample sample = new JavaApiSample();
sample.createConnection( CONNECTION_STRING, SESSION_TIMEOUT );
if ( sample.createPath( ZK_PATH, "我是节点初始内容" ) ) {
System.out.println();
System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" );
sample.writeData( ZK_PATH, "更新后的数据" );
System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" );
sample.deleteNode( ZK_PATH );
} sample.releaseConnection();
} /**
* 收到来自Server的Watcher通知后的处理。
*/
@Override
public void process( WatchedEvent event ) {
System.out.println( "收到事件通知:" + event.getState() +"\n" );
if ( KeeperState.SyncConnected == event.getState() ) {
connectedSemaphore.countDown();
} } }
输出结果:
收到事件通知:SyncConnected 节点创建成功, Path: /nileader, content: 我是节点初始内容 获取数据成功,path:/nileader
数据内容: 我是节点初始内容 更新数据成功,path:/nileader, stat: 42950186407,42950186408,1350820182392,1350820182406,1,0,0,232029990722229433,18,0,42950186407 获取数据成功,path:/nileader
数据内容: 更新后的数据 删除节点成功,path:/nileader
14.ZooKeeper Java API 使用样例的更多相关文章
- zookeeper实战:SingleWorker代码样例
我们需要一个“单点worker”系统,此系统来确保系统中定时任务在分布式环境中,任意时刻只有一个实例处于活跃:比如,生产环境中,有6台机器支撑一个应用,但是一个应用中有30个定时任务,这些任务有些必须 ...
- 9. 使用ZooKeeper Java API编程
ZooKeeper是用Java开发的,3.4.6版本的Java API文档可以在http://zookeeper.apache.org/doc/r3.4.6/api/index.html上找到. Ti ...
- Zookeeper java api
Zookeeper java api 主要有以下几个: 方法名称 描述 String create(final String path, byte data[], List acl, CreateM ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- java设计模式演示样例
创建模式 1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...
- java servlet 代码样例 (demo)
今天又搞了下jsp +servlet 的代码样例,感觉虽然搭了好多次,可是每次还是不记得那些参数,都要去网上搜索,索性自己把这次的简单demo给记录下来,供下次使用的时候直接复制吧. 这个web逻辑 ...
- zookeeper Java API 简单操作示例
本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...
- Java多线程演示样例(模拟通话,sleep,join,yield,wait,notify,Semaphore)
主线程等待子线程的多种方法 synchronized浅析 sleep 是静态方法,Thread.sleep(xx)谁调用谁睡眠. join 是合并方法.当前线程调用其它线程xx.join()则等到xx ...
- Zookeeper JAVA API的使用
0. 前言 zookeeper安装及使用 http://www.cnblogs.com/rocky-fang/p/7880309.html 1. 开发环境配置 1.1 idea创建一个maven工程 ...
随机推荐
- 轻松掌握Ubuntu Linux的3D桌面快捷键使用
视频下载地址: http://115.com/file/be4n23v6#linux3d.rar 轻松掌握Ubuntu Linux的3D桌面快捷键使用 高级3D桌面展示 本文出自 "李晨光原 ...
- Sub Thread to update main Thread (UI)
Sub Thread to update main Thread (UI) main Thread : A has Hander.HandleMessage() to process the & ...
- Laravel 框架指定路由关闭 csrf
修改 app\Http\Middleware\VerifyCsrfToken.php 内容: <?php namespace App\Http\Middleware; use Closure; ...
- Eclipse+PyDev解决中文输入和注释问题
Eclipse的设置 window->preferences->general->editors->text editors->spelling->encoding ...
- mongoDB简单介绍及安装
近期一段时间对mongoDB进行了简单的学习,从它是什么?干什么?怎么用?优缺点?这一系列的疑问到如今可以简单运用.我想须要对其进行简单的总结和概述.那么这一篇就从最基础的開始,对其主要的概念和安装来 ...
- OpenCASCADE 参数曲面面积
OpenCASCADE 参数曲面面积 eryar@163.com Abstract. 本文介绍了参数曲面的第一基本公式,并应用曲面的第一基本公式,结合OpenCASCADE中计算多重积分的类,对任意参 ...
- AIX lsof 命令
1.查看某端口运行情况 如查看22端口运行情况 # lsof –i:22 # lsof –i:22 –r ----每隔15秒显示22端口的监听情况. 2.查看活动的连接 如:查看ip地址为19 ...
- 解决create-react-app 后 npm start 中出现 的webpack版本问题和webpack-dev-server的版本问题
利用VSCode搭建react的脚手架运行环境的时候.create-react-app之后npm start出现如下图的问题: There might be a problem with the pr ...
- lastb---显示用户错误的登录列表
lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常.单独执行lastb命令,它会读取位于/var/log目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显 ...
- 洛谷——P1498 南蛮图腾
https://www.luogu.org/problem/show?pid=1498 题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往 ...