【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看PDF版本
转载请注明:@ni掌柜 nileader@gmail.com
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合。通过这些原语言的组合使用,能够帮助我们解决更高层次的分布式问题,关于ZooKeeper的典型使用场景,请查看这个文章《ZooKeeper典型使用场景一览》
本文主要针对ZooKeeper提供的Java API,通过实际代码讲述如何使用API。
- 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
【ZooKeeper Notes 3】ZooKeeper Java API 使用样例相关推荐
- 14.ZooKeeper Java API 使用样例
转自:http://www.aboutyun.com/thread-7332-1-1.html 1 package com.taobao.taokeeper.research.sample; 2 3 ...
- chatgpt api请求样例
chatgpt去年刚出来时我就到openai注册了账号,必须用国外的线路才能注册,正常注册不了, 注册完要用国外手机接收验证码,才能使用,我卡到验证码就没继续用了, 昨晚,找了几个国内的镜像,用了一番 ...
- 简单的Java代码测试样例设计
简单的Java代码测试样例设计 函数一 public static int findLast(int[] x, int y) {for (int i = x.length - 1; i > 0; ...
- zookeeper入门学习之java api会话建立《四》
在上一篇zk中简单玩了下api的连接创建会话,也总是留下了很多坑,就是那些引申开来,搞不明白的问题.有时候想追究起来,问题总是那么无穷无尽,有时候问题比答案更有力度吧,到最后都是些哲学问题吗?存在的这 ...
- java设计模式演示样例
创建模式 1.工厂方法模式(Factory Method) 将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...
- java 内存泄漏样例_一次线上Java应用内存泄漏分析实例
由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下 ...
- 一个优雅的后端API接口样例和代码实现方案
前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟:以前后 ...
- java监听器演示样例
监听器的原理是观察者模式.就像明星(事件源)聚拢了一群粉丝(观察者).当明星有啥举动的时候会通过粉丝们报道出去. 订阅信息.计算器button都是该原理的应用. 以下写了一个监听器的小样例: pack ...
- dataTables中文文档API和样例
2019独角兽企业重金招聘Python工程师标准>>> http://blog.codepiano.com/pages/jquery-datatables-config-cn.htm ...
最新文章
- 【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!...
- CornerEigenValsAndVecs函数
- mysql 删除原理_MySQL权限原理及删除MySQL的匿名账户
- Visual Studio 2010 and .NET Framework 4 Beta 1
- Fibonacci递归非递归方法
- vue-cli使用swiper4在ie以及safari报错
- 海龟绘图小动物_被解救海龟经野化训练后放归大海,这一幕让人惊叹不已
- linux导出表数据dmp,导出表的部分数据到dmp文件中
- 【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019
- bjui给出的一个标准应用的首页
- 计算机组成第六章作业,计算机组成原理第六章作业_计算机的运算方法1
- Java 垃圾回收器G1介绍
- python怎么学比较快,怎样快速学会python
- 图像大小调整_如何在Windows中调整图像和照片的大小
- LigerUI视频教程_基于LigerUI前端技术实现的管理平台
- JAVA 生成二维码并保存到本地或文件服务器
- 你在加密市场能走多远 取决于你的思维认知
- 聊聊C++任务定时器的设计与具体实现
- HTML在网页上不能显示图片问题
- 电脑连接到手机并安装手机驱动usb-driver
热门文章
- C#调用存储过程简单完整例子
- 如何实现可以带详细表格的DropDownList
- Asp.net支持的最大上传文件大小
- Linux socket 网络编程 常用头文件
- Windows客户端C/C++编程规范“建议”——指针
- Leptonica在VS2010中的编译及简单使用举例
- 【FFmpeg】使用sws_scale将AVFrame转换后的图像数据放入cv::Mat中
- 【C++】new和malloc的区别
- 【Go】Go基础(九):接口(Interfaces)与反射(reflection)
- wpf 窗口的返回值_如何:获取页函数的返回值