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工程 ...
随机推荐
- 8种提升 ASP.NET Web API 性能的方法
- happy Mom ——php mysqli DES加密
看完<爱你就像爱生命>这本书,真的看出小波哥很有才,跟小波哥比起来,我唯一拿的出手的可能就是我比他的颜值了.想起一句话,人不是因为美丽而可爱,而是因为可爱而美丽.所以我对我的要求是,继续修 ...
- 学习TF:《TensorFlow机器学习实战指南》中文PDF+英文PDF+代码
从实战角度系统讲解TensorFlow基本概念及各种应用实践.真实的应用场景和数据,丰富的代码实例,详尽的操作步骤,带你由浅入深系统掌握TensorFlow机器学习算法及其实现. <Tensor ...
- 【RHEL7/CentOS7基本配置】
目录 @ 相比于6.x的版本,Rhel7/CentOS7增加或改进了以下7大特性. 1.身份管理 kerberos的跨平台信任机制:kerberos将完全兼容微软活动目录,实现完全使用活动目录进行认证 ...
- UVALive 7146 Defeat The Enemy
Defeat The Enemy Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Long long ...
- log4j小结
核心包: org.apache.log4j 三大组件 Loggers 日志操作 Appenders 日志的展现形式 Layouts 日志的展现格式 日志等级 TRACE DEBUG INFO WARN ...
- RecyclerView实现瀑布流布局
RecyclerView本身提供了三个LayoutManager的实现 LinearLayoutManager GridLayoutManager StaggeredGridLayoutManager ...
- 【Android界面实现】使用GestureOverlayView控件实现手势识别
在Android开发中,我们不光能够使用已有的实现方式.并且,我们还能够利用Android这个智能手机平台.实现一些比較有特色的功能. 本篇文章介绍使用GestureOverlayView这个控件.实 ...
- android 图片特效处理之 光晕效果
这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...
- android 图片特效处理之图片叠加
这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...