转自:http://www.aboutyun.com/thread-7332-1-1.html

  1 package com.taobao.taokeeper.research.sample;
  2
  3 import java.io.IOException;
  4 import java.util.concurrent.CountDownLatch;
  5
  6 import org.apache.zookeeper.CreateMode;
  7 import org.apache.zookeeper.KeeperException;
  8 import org.apache.zookeeper.WatchedEvent;
  9 import org.apache.zookeeper.Watcher;
 10 import org.apache.zookeeper.Watcher.Event.KeeperState;
 11 import org.apache.zookeeper.ZooDefs.Ids;
 12 import org.apache.zookeeper.ZooKeeper;
 13
 14 import common.toolkit.java.util.ObjectUtil;
 15
 16 /**
 17  * ZooKeeper Java Api 使用样例<br>
 18  * ZK Api Version: 3.4.3
 19  *
 20  * @author nileader/nileader@gmail.com
 21  */
 22 public class JavaApiSample implements Watcher {
 23
 24     private static final int SESSION_TIMEOUT = 10000;
 25     private static final String CONNECTION_STRING = "test.zookeeper.connection_string:2181";
 26     private static final String ZK_PATH = "/nileader";
 27     private ZooKeeper zk = null;
 28
 29     private CountDownLatch connectedSemaphore = new CountDownLatch( 1 );
 30
 31     /**
 32      * 创建ZK连接
 33      * @param connectString  ZK服务器地址列表
 34      * @param sessionTimeout   Session超时时间
 35      */
 36     public void createConnection( String connectString, int sessionTimeout ) {
 37         this.releaseConnection();
 38         try {
 39             zk = new ZooKeeper( connectString, sessionTimeout, this );
 40             connectedSemaphore.await();
 41         } catch ( InterruptedException e ) {
 42             System.out.println( "连接创建失败,发生 InterruptedException" );
 43             e.printStackTrace();
 44         } catch ( IOException e ) {
 45             System.out.println( "连接创建失败,发生 IOException" );
 46             e.printStackTrace();
 47         }
 48     }
 49
 50     /**
 51      * 关闭ZK连接
 52      */
 53     public void releaseConnection() {
 54         if ( !ObjectUtil.isBlank( this.zk ) ) {
 55             try {
 56                 this.zk.close();
 57             } catch ( InterruptedException e ) {
 58                 // ignore
 59                 e.printStackTrace();
 60             }
 61         }
 62     }
 63
 64     /**
 65      *  创建节点
 66      * @param path 节点path
 67      * @param data 初始数据内容
 68      * @return
 69      */
 70     public boolean createPath( String path, String data ) {
 71         try {
 72             System.out.println( "节点创建成功, Path: "
 73                     + this.zk.create( path, //
 74                                               data.getBytes(), //
 75                                               Ids.OPEN_ACL_UNSAFE, //
 76                                               CreateMode.EPHEMERAL )
 77                     + ", content: " + data );
 78         } catch ( KeeperException e ) {
 79             System.out.println( "节点创建失败,发生KeeperException" );
 80             e.printStackTrace();
 81         } catch ( InterruptedException e ) {
 82             System.out.println( "节点创建失败,发生 InterruptedException" );
 83             e.printStackTrace();
 84         }
 85         return true;
 86     }
 87
 88     /**
 89      * 读取指定节点数据内容
 90      * @param path 节点path
 91      * @return
 92      */
 93     public String readData( String path ) {
 94         try {
 95             System.out.println( "获取数据成功,path:" + path );
 96             return new String( this.zk.getData( path, false, null ) );
 97         } catch ( KeeperException e ) {
 98             System.out.println( "读取数据失败,发生KeeperException,path: " + path  );
 99             e.printStackTrace();
100             return "";
101         } catch ( InterruptedException e ) {
102             System.out.println( "读取数据失败,发生 InterruptedException,path: " + path  );
103             e.printStackTrace();
104             return "";
105         }
106     }
107
108     /**
109      * 更新指定节点数据内容
110      * @param path 节点path
111      * @param data  数据内容
112      * @return
113      */
114     public boolean writeData( String path, String data ) {
115         try {
116             System.out.println( "更新数据成功,path:" + path + ", stat: " +
117                                                         this.zk.setData( path, data.getBytes(), -1 ) );
118         } catch ( KeeperException e ) {
119             System.out.println( "更新数据失败,发生KeeperException,path: " + path  );
120             e.printStackTrace();
121         } catch ( InterruptedException e ) {
122             System.out.println( "更新数据失败,发生 InterruptedException,path: " + path  );
123             e.printStackTrace();
124         }
125         return false;
126     }
127
128     /**
129      * 删除指定节点
130      * @param path 节点path
131      */
132     public void deleteNode( String path ) {
133         try {
134             this.zk.delete( path, -1 );
135             System.out.println( "删除节点成功,path:" + path );
136         } catch ( KeeperException e ) {
137             System.out.println( "删除节点失败,发生KeeperException,path: " + path  );
138             e.printStackTrace();
139         } catch ( InterruptedException e ) {
140             System.out.println( "删除节点失败,发生 InterruptedException,path: " + path  );
141             e.printStackTrace();
142         }
143     }
144
145     public static void main( String[] args ) {
146
147         JavaApiSample sample = new JavaApiSample();
148         sample.createConnection( CONNECTION_STRING, SESSION_TIMEOUT );
149         if ( sample.createPath( ZK_PATH, "我是节点初始内容" ) ) {
150             System.out.println();
151             System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" );
152             sample.writeData( ZK_PATH, "更新后的数据" );
153             System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" );
154             sample.deleteNode( ZK_PATH );
155         }
156
157         sample.releaseConnection();
158     }
159
160     /**
161      * 收到来自Server的Watcher通知后的处理。
162      */
163     @Override
164     public void process( WatchedEvent event ) {
165         System.out.println( "收到事件通知:" + event.getState() +"\n"  );
166         if ( KeeperState.SyncConnected == event.getState() ) {
167             connectedSemaphore.countDown();
168         }
169
170     }
171
172 }
173 输出结果:
174 收到事件通知:SyncConnected
175
176 节点创建成功, Path: /nileader, content: 我是节点初始内容
177
178 获取数据成功,path:/nileader
179 数据内容: 我是节点初始内容
180
181 更新数据成功,path:/nileader, stat: 42950186407,42950186408,1350820182392,1350820182406,1,0,0,232029990722229433,18,0,42950186407
182
183 获取数据成功,path:/nileader
184 数据内容: 更新后的数据
185
186 删除节点成功,path:/nileader 

14.ZooKeeper Java API 使用样例相关推荐

  1. 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...

  2. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作

    目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...

  3. chatgpt api请求样例

    chatgpt去年刚出来时我就到openai注册了账号,必须用国外的线路才能注册,正常注册不了, 注册完要用国外手机接收验证码,才能使用,我卡到验证码就没继续用了, 昨晚,找了几个国内的镜像,用了一番 ...

  4. 简单的Java代码测试样例设计

    简单的Java代码测试样例设计 函数一 public static int findLast(int[] x, int y) {for (int i = x.length - 1; i > 0; ...

  5. java设计模式演示样例

    创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相 ...

  6. JAVA大数据(2)--ZooKeeper Java API使用

    1 准备工作 拷贝ZooKeeper安装目录下的zookeeper.x.x.x.jar文件到项目的classpath路径下. 2 创建连接和回调接口 首先需要创建ZooKeeper对象, 后续的一切操 ...

  7. 一个优雅的后端API接口样例和代码实现方案

    前言 在移动互联网,分布式.微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟:以前后 ...

  8. java监听器演示样例

    监听器的原理是观察者模式.就像明星(事件源)聚拢了一群粉丝(观察者).当明星有啥举动的时候会通过粉丝们报道出去. 订阅信息.计算器button都是该原理的应用. 以下写了一个监听器的小样例: pack ...

  9. java 内存泄漏样例_一次线上Java应用内存泄漏分析实例

    由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下 ...

最新文章

  1. WINDOWS下安装MYSQL—图文详解
  2. linux重启和关机命令
  3. img加载不出来,给个默认图片。
  4. C++中使用try{}catch()的优/缺点
  5. 如何规划农商行商业智能系统中的决策分析系统?
  6. 如何给企业选择一款ERP系统
  7. jsp servlet mysql 乱码_关于jsp和servlet中的乱码问题
  8. Android 手机UI界面设计采纳网站
  9. 软件可靠性的一些关注点
  10. sql注入搞事情(连载一)
  11. SEO应届生,如何快速的了解SEO?
  12. 原创:职场最忌讳的几大“想当然”
  13. 产品日记(二)一些愚见, 记录在此
  14. P3373 【模板】线段树1和P3373 【模板】线段树 2
  15. 【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)
  16. 多任务学习(Multi-task Learning)方法总结
  17. Apache shiro 官方API (中文版)(承蒙大佬们看重 小弟整理了下 无需积分 编辑的不好 希望帮到你们)
  18. Java 以任意数量空格分割字符串方式
  19. elasticsearch性能测试工具rally深入详解
  20. wind上怎么连接mysql_windows上连接mysql数据库怎么连接

热门文章

  1. 工业机器人电柜布线_协作并联,重新注解并联机器人
  2. php中间值,比较当前值和下一个值,并在中间推送数组(Adodb)PHP
  3. sublime运行python代码python没显示_解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享...
  4. Python之try except异常处理工作机制和案例解析
  5. 卷积层 convolutional networks
  6. 【信息抽取】介绍一种端到端的关系抽取方法
  7. 【杂谈】如何在专家指导下系统性学习自然语言处理
  8. 365篇原创后,有三AI喊你正式加入来不来?
  9. 有三AI小程序上线,把你的代码show给世界
  10. 【AI白身境】深度学习必备图像基础