能不能有一个简单的实现去实现zookeeper的API,其实是有很多的,我给你推荐的就是两套,第一套叫做zkClient,其实zkClient我也不想作为重点,我想作为重点的是Curator,你只有理解zookeeper最原始的API,但是你得理解他的概念之后,然后才能学好client,才能学好Curator,要不然你只是一个应用级别的,你并不是深入了解这个的,很多人都会问,要问的话就问原生的,就问你Curator怎么实现的,分布式锁是怎么去实现的,curator也是封装了原生的代码去实现的

这个使用其实非常简单了,不能说非常简单,也没有Curator简单,也没有Curator强大,目前用的最多的可能是zkClient,没有详细的去了解过这个事,其实就是引入了zkclient-0.1.jar这个jar包,你会发现好多的框架,利用zookeeper的框架,像比如说dubbo,他用的都是这个,都是这玩意

我刚才给你们看的是dubbox,当当网重写阿里的那个,人家最新的用的是curator

dubbox是当当网写的,阿里用的是zkclient

你既然使用dubbo的话,SOA肯定会涉及到注册服务的事,注册服务就是用的zookeeper的协调,zookeeper他是怎么去做协调的,他肯定不是用的原生的,阿里巴巴都没有用原生的API去写这个事,人家使用zkclient这个API去写的,因为它认为原生的zk API是在是太难用了,就包括我以前在工作的时候,我们那时候比写dubbo的时候还要早一点吧,现在主流比较新的都用curator,没有人用zkclient,但是zkclient你也要明白,他简化了什么事,介绍完zkclient,它是Datameter这个工程师反正就是几个哥们一起开发的,基于原生API再封装的,简化了ZK复杂性的一套,新型的API叫做zkClient,然后他怎么去使用呢,创建方法有1,2,3,4,5,咱们直接看代码,你的世界稍微亮了一点了一个叫zkclient base,一个叫watcher
package com.learn.zkclient.base;import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;/*** 你看这个世界就稍微好一点了* 这里面的代码可能很简单* * * @author Leon.Sun**/
public class ZkClientBase {/** zookeeper地址 *//*** 首先还是连这个地址*/static final String CONNECT_ADDR = "59.110.138.145:2181";
//  static final String CONNECT_ADDR = "192.168.80.88:2181,192.168.80.87:2181,192.168.80.86:2181";/** session超时时间 *//*** 超时时间都有了*/static final int SESSION_OUTTIME = 5000;//ms public static void main(String[] args) throws Exception {/*** org.I0Itec.zkclient.ZkClient* 这个是zkclient的API* I0Itec这个包* 他也是new了一个* ZkClient(IZkConnection connection, int connectionTimeout)* 一个是需要IZkConnection这个接口* 还有一个是超时时间* 我需要创建一个对象* 然后里面再传一个address* 在ZkClient再传一个超时时间* 语法就是很固定的* 还有一些其他的API* 你还可以实现一些序列号的框架* 在这里我就不去说了* 真正想序列化到一个zookeeper上* 没有什么实际太大的意义* 传JSON就over了* 大不了我转一下码* 怎么去使用呢* 把这个对象实例化出来*/ZkClient zkc = new ZkClient(new ZkConnection(CONNECT_ADDR), 5000);//1. create and delete方法 /*** 创建一个临时节点* API提供了createEphemeral* 还提供了createPersistent* zkc.create(path, data, mode)* 他其实还有一个create的方法* mode是你要创建的模式是什么* 这个你可以选* 和原生的差不多* 要理解持久化顺序的* 要不然就是Ephemeral* 要不然就是Persistent* * 你会发现我们这里有一个区别* 什么区别* 我去zkCli.sh* ls /* 他有一个/super* rmr /super删除* ls /* 还是啥也没有数据很干净* 我现在直接做了一件什么事* * temp突然没了* 因为10秒钟过了* 他就释放连接了* 因为他是Ephemeral* * */
//      zkc.createEphemeral("/temp");/*** 竟然做了这样一件事* 第一个是temp* 第二个是c1* 这里递归的创建super和c1* 解决了递归创建的这个事* 他是可以去做递归创建的* 有递归创建必然就有递归删除* 但是他的递归创建还是不太好* 只能指定一个key* 能不能把value给我指定好* 其实你想一想* 我能不能传一个value* 他是他确实没有这么强大* 如果我能这么去写就无敌了* 可以传一个数组了* 传一个有序的数组* 他这个API只是这样的* 能不能帮我创建一个节点的key* 这个value他都是空的* 要么是path路径* 要么是布尔类型的* 要么就是Object类型的* */
//      zkc.createPersistent("/super/c1", true);/*** 它是支持递归创建的* */
//      zkc.createPersistent("/super/c1/c2", true);/*** 我们在这里休眠10秒钟*/
//      Thread.sleep(10000);
//      zkc.delete("/temp");/*** 有递归的创建* 就必然有递归的删除* 要么delete要么递归的delete* */
//      zkc.deleteRecursive("/super");//2. 设置path和data 并且读取子节点和每个节点的内容/*** 这是创建一个super* */
//      zkc.createPersistent("/super", "1234");
//      /**
//       * super下创建一个c1
//       * 然后内容是什么
//       *
//       */
//      zkc.createPersistent("/super/c1", "c1内容");
//      zkc.createPersistent("/super/c2", "c2内容");
//      /**
//       * 这是zkclient提供API
//       * 有点区别于原生的API
//       * 原生API有exists方法啊
//       * get方法啊
//       * 后面都有一个watcher
//       * 因为zkclient觉得持久化和watcher他们两个如果拆分在一起
//       * 那就失去了我封装的意义了
//       * 其实zkclient要解决的一个问题就是watcher这个事就给屏蔽掉了
//       * 不需要你写数据的时候需要去watch了
//       * 它是最大最大的特点也是好处
//       * 一会再看他到底要怎么去写啊
//       * 你会发现这里的增删改查操作和watcher没有关系
//       *
//       * 把他的孩子get出来
//       *
//       */
//      List<String> list = zkc.getChildren("/super");
//      for(String p : list){
//          System.out.println(p);
//          /**
//           * 当然他也是一个相对路径
//           *
//           */
//          String rp = "/super/" + p;
//          /**
//           * 这里的布尔类型也不是那个watcher
//           * read其实原生的API
//           *
//           */
//          String data = zkc.readData(rp);
//          /**
//           * 最后我打印一下
//           *
//           */
//          System.out.println("节点为:" + rp + ",内容为: " + data);
//      }//3. 更新和判断节点是否存在/*** 他这个是原生的API* 基本上没有原生API的Watcher了* 原先内存是c1内容* 我现在改成新内容* 原生API是需要传一个字节数组* 但是这里直接是一个对象了* */zkc.writeData("/super/c1", "新内容");/*** 这里应该是新内容了* 读出来的时候可以直接转成一个字符串* 这是他第二个好处* */System.out.println(zkc.readData("/super/c1").toString());/*** 没有任何的watcher参数* 判断你存不存在* 这里存不存在* 直接给你返回一个true* 这个就是一个zkclient* 你是不是觉得很简单* 但是是不是很疑惑* 就是那个watcher哪去了* 你可以理解为和原生的API分离了* 原生的API是耦合在一起的* 但是zkclient是提供了两种方式的watcher* */System.out.println(zkc.exists("/super/c1"));//4.递归删除/super内容
//      zkc.deleteRecursive("/super");        /*** 最后我们释放连接*/zkc.close();}
}

Zookeeper_zkClientAPI讲解相关推荐

  1. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  2. 详细通俗重点CRF层讲解

    本文翻译自GitHub博客上的原创文章,结尾有原文链接.文章没有晦涩的数学公式,而是通过实例一步一步讲解CRF的实现过程,是入门CRF非常非常合适的资料. 相关项目代码: BERT-BiLSMT-CR ...

  3. 高级数据结构讲解与案例分析

    然而,仅仅掌握好它们不足以应付大厂的算法面试的.为了达到对时间和空间复杂度的理想要求,本节课探究高级数据结构,它们的实现要比那些常用的数据结构要复杂得多.其中重点介绍: 优先队列 图 前缀树 线段树 ...

  4. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解

    PHP 伪静态实现技术原理讲解 发布于 2015-01-18 23:52:58 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  5. ssm开发框架原理_SSM 单体框架 - 前端开发:视频讲解

    视频讲解 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com ...

  6. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

  7. PCL:k-d tree 1 讲解

    1.简介 kd-tree简称k维树,是一种空间划分的数据结构.常被用于高维空间中的搜索,比如范围搜索和最近邻搜索.kd-tree是二进制空间划分树的一种特殊情况.(在激光雷达SLAM中,一般使用的是三 ...

  8. 基础矩阵,本质矩阵,单应性矩阵讲解

    ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作.其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个 ...

  9. 藤摇椅游戏道具制作全流程讲解视频教程

    藤摇杆|一个完整的游戏资产工作流程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 含工程素材 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 | ...

最新文章

  1. 想要永久远程办公?抱歉,你可能「不配」
  2. JAVA WEB 乱码问题解决方案
  3. 如何正确地从IntelliJ构建jar?
  4. NR 5G NAS非接入层
  5. BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】
  6. linux下clone一直运行,Linux中vgimportclone命令起什么作用呢?
  7. Python绘制sigmoid函数及其导数图像
  8. hanlp安装和使用
  9. php 未找到驱动程序,Laravel 5 PDOException找不到驱动程序
  10. Android Fragment切换动画效果
  11. Android调试萤石云摄像头时,出现400036错误
  12. 形式逻辑(07)性质判断 和 推理
  13. 计算机网络习题篇(一)
  14. 分享一份适合程序员的LaTex版本个人简历
  15. html语言教程教案,HTML语言与网页制作教案.doc
  16. ZJM要抵御宇宙射线
  17. Seaweedfs基本操作
  18. 一文搞懂,PO设计模式详解
  19. CentOS 7安裝视频解码器
  20. 【DevCloud · 敏捷智库】软件开发团队如何管理琐碎、突发性任务(内附下载材料)

热门文章

  1. 【Spring学习】spring注解自动注入bean
  2. SAPGUI系统登录页面配置的SAProuter有什么用 1
  3. Web前端开发规范手册
  4. 创新将会出现在云端,边缘还是其他地方?
  5. Google Chrome 53 Beta 引入影子 DOM V1
  6. PHP实现二维码扫码登录
  7. 从“没有免费的午餐”理论看机器学习模型
  8. Android Application 对象介绍
  9. android之Fragment(官网资料翻译)三
  10. [推荐]Windows2003 Server 设置大全(一)