简介

本文是使用apache提供的原生api做zookeeper客户端

  • jar包

zookeeper-3.4.5.jar

  •   Demo
    1. package bjsxt.zookeeper.base;
    2.  
    3. import java.util.concurrent.CountDownLatch;
    4.  
    5. import org.apache.zookeeper.AsyncCallback;
    6. import org.apache.zookeeper.WatchedEvent;
    7. import org.apache.zookeeper.Watcher;
    8. import org.apache.zookeeper.Watcher.Event.EventType;
    9. import org.apache.zookeeper.ZooKeeper;
    10. import org.apache.zookeeper.Watcher.Event.KeeperState;
    11.  
    12. /**
    13. * Zookeeper 原生api实践
    14. * @since 2017-6-13
    15. */
    16. public class ZookeeperBase {
    17.  
    18. /** zookeeper地址 */
    19. static final String CONNECT_ADDR = "192.168.0.4:2181,192.168.0.5:2181,192.168.0.6:2181";
    20. /** session超时时间 */
    21. static final int SESSION_OUTTIME = ;//ms
    22. /** 信号量,阻塞程序执行,用于等待zookeeper连接成功,发送成功信号 */
    23. static final CountDownLatch connectedSemaphore = new CountDownLatch();
    24.  
    25. public static void main(String[] args) throws Exception{
    26.  
    27. ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){
    28. @Override
    29. public void process(WatchedEvent event) {
    30. //获取事件的状态
    31. KeeperState keeperState = event.getState();
    32. EventType eventType = event.getType();
    33. //如果是建立连接
    34. if(KeeperState.SyncConnected == keeperState){
    35. if(EventType.None == eventType){
    36. //如果建立连接成功,则发送信号量,让后续阻塞程序向下执行
    37. connectedSemaphore.countDown();
    38. System.out.println("zk 建立连接");
    39. }
    40. }
    41. }
    42. });
    43.  
    44. //进行阻塞
    45. connectedSemaphore.await();
    46.  
    47. System.out.println("..");
    48. //创建父节点
    49. //zk.create("/testRoot", "testRoot".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    50.  
    51. //创建子节点
    52. // String ret = zk.create("/testRoot/children", "children data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    53. // System.out.println("创建子节点"+ret);
    54. //获取节点洗信息
    55. /*byte[] data = zk.getData("/testRoot", false, null);
    56. System.out.println(new String(data));
    57. System.out.println(zk.getChildren("/testRoot", false));*/
    58.  
    59. //修改节点的值
    60. /* zk.setData("/testRoot", "modify data root".getBytes(), -1);
    61. byte[] data = zk.getData("/testRoot", false, null);
    62. System.out.println(new String(data)); */
    63.  
    64. //判断节点是否存在
    65. // System.out.println(zk.exists("/testRoot/children", false));
    66. //同步删除节点
    67. zk.delete("/testRoot/children", -);
    68. //异步删除节点
    69. zk.delete("/testRoot/children", -, new AsyncCallback.VoidCallback() {
    70. @Override
    71. public void processResult(int rc, String path, Object ctx) {
    72. System.out.println("rc====="+rc);
    73. System.out.println("path======"+path);
    74. System.out.println("ctc======"+path);
    75. }
    76. } , "回调值");
    77. // System.out.println(zk.exists("/testRoot/children", false));
    78.  
    79. zk.close();
    80.  
    81. }
    82.  
    83. }

    总结:

  • 在这里api对zookeeper节点进行增删改查,有同步和异步的方式
  • zookeeper不支持递归创建子节点(也就是说在父节点不存在的情况下,不允许创建子节点)
  • zookeeper不支持递归删除(也就是说在父节点有子节点的情况下,不允许直接删除父节点)

zookeeper原生API做java客户端的更多相关文章

  1. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

  2. (原) 2.1 Zookeeper原生API使用

    本文为原创文章,转载请注明出处,谢谢 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> & ...

  3. zookeeper生产最广泛使用java客户端curator介绍及其它客户端比较

    关于zookeeper的原理解析,可以参见zookeeper核心原理详解,本文所述大多数实践基于对zookeeper原理的首先理解. Curator是Netflix公司开源的一个Zookeeper客户 ...

  4. ZooKeeper 原生API操作

    zookeeper客户端和服务器会话的建立是一个异步的过程,也就是说在程序中,程序方法在处理完客户端初始化后立即返回(即程序继续往下执行代码,这样,在大多数情况下并没有真正的构建好一个可用会话,在会话 ...

  5. Zookeeper Java客户端API的使用

    1. 原生api         具体查看下面github代码 2. ZkClient ZkClient是Github上一个开源的ZooKeeper客户端.ZkClient在ZooKeeper原生 A ...

  6. ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用

    这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...

  7. ZooKeeper(七)-- ZK原生API实现分布式锁

    一.使用场景 在分布式应用,往往存在多个进程提供同一服务.这些进程有可能在相同的机器上,也有可能分布在不同的机器上. 如果这些进程共享了一些资源,可能就需要分布式锁来锁定对这些资源的访问. 二.实现分 ...

  8. [转载] ZooKeeper的Java客户端API

    转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...

  9. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

随机推荐

  1. openfire + spark 展示组织机构(客户端)

    在spark 加一个插件用于展示组织机构, 参考了好多人的代码 插件主类增加一个 TAB用于展示机构树 package com.salesoa.orgtree; import java.net.URL ...

  2. Apache-支持shtml实现include文件解析的配置方法

    1. 确认加载include.so模块,将注释去掉: LoadModule include_module libexec/apache2/mod_include.so 2. AddType部分去掉这两 ...

  3. spring注解 di 和 ioc 注解

    注解: 1.注解就是为了说明java中的某一个部分的作用(Type) 2.注解都可以用于哪个部门是@Target注解起的作用 3.注解可以标注在ElementType枚举类所指定的位置上 4. @Do ...

  4. 如何理解并学习javascript中的面向对象(OOP) [转]

    如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...

  5. JMeter学习笔记--JMeter常用测试元件

    JMeter测试计划有一个被称为“函数测试模式”的选项,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据.如果你在测试监听器中选择一个文件,这个数据将被写入文件.如果你尝试一个较小的测 ...

  6. PLSQL_统计信息系列01_统计信息的概念和重要性

    2014-12-18 Created By BaoXinjian

  7. tmux安装

    安装tmux sudo yum -y install tmux 修改tmux配置 cat > /root/.tmux.conf <<EOF set-option -g default ...

  8. BZOJ 2466 中山市选2009 树 高斯消元+暴力

    题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...

  9. mysql-5.7.20 版本的 mysql-group-replication 可用性测试报告

    一.喜迎 mysql-5.7.20  事实上mysql-group-replication 功能是在mysql-5.7.17这个版本上引入的,它实现了mysql各个结点间数据强一致性, 这个也成为了我 ...

  10. django 在建模时的一个手贱

    最近在写一个网站,在建立model的时候遇到了一些问题,最后找了好久才找到为什么. 一.django的model定义如下: from django.db import models # Create ...