`
QING____
  • 浏览: 2250677 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

I0Itec-zkClient小结

 
阅读更多

    zookeeper客户端目前社区中比较多,而且大家在使用zookeeper时或多或少都会自己"重复发明轮子";事实上apache zookeeper API也已经足够完善,我们自己封装client也是非常简单的工作;其实大家封装client,无外乎就是调整一些非常基本的功能.我们看看I0Itec能否满足我们的需要.

    I0Itec-zkClient并不是一个非常大众化的工具,也没有提供完美的功能列表;不过它的简单和易用性对我们的一些常规应用,似乎已经足够了.I0Itec特性一览: 

    1) 提供了zookeeper断链重连的特性------这个特性似乎每个开发者都会设计,而且代码风格几乎"如出一辙"..在大部分zookeeper使用场景中,我们都要求它能够在断链的时候,重新建立连接,无论session失效与否.

    2) 便捷的event监听器机制-------向ZNODE节点注册watch,每个开发者都使用过,尽管watch机制并不能确保数据变更的实时性..watch-event属于"即发即失",因为我们需要得到event时候,再去注册一遍,这也是一个非常繁琐的事情,I0Itec-zkClient提供了event-listener的小技巧,可以帮助我们"解脱".

    3) zookeeper异常处理-------zookeeper中繁多的Exception,以及每个Exception所需要关注的事情各有不同,你应该记得那一堆try-catch给你带来的烦恼;I0Itec简单的做了封装.

    4) data序列化------简单的data序列化.(Serialzer/Deserialzer)

 

I0Itec-zkClient API

  • ZkConnection类: 对zookeeper API的简单分装,提供了链接zookeeper server和数据CRUD的操作;此类实现了IZkConnection接口,通常情况下,如果I0Itec-zkclient不能满足需要的时候,我们可以重写ZkConnection即可.
  • ZkClient类: 核心类,也是开发者需要直接使用的类,它内部维护了zookeeper的链接管理和Event处理逻辑等,同时也暴露了zookeeper znode的CRUD方法列表.
  • IZkChildListener接口: znode 子节点事件侦听器,当ZkClient接收到某个path节点变更或者子节点变更事件时,会触发lisntener.
  • IZkDataListener接口: 
  • IZkStateListener接口: 当zookeeper客户端状态变更时,触发.

I0Itect-zkClient暂时有几个方法需要重写:

    1) create方法:创建节点时,如果节点已经存在,仍然抛出NodeExistException,可是我期望它不在抛出此异常.

    2) retryUtilConnected: 如果向zookeeper请求数据时(create,delete,setData等),此时链接不可用,那么调用者将会被阻塞直到链接建立成功;不过我仍然需要一些方法是非阻塞的,如果链接不可用,则抛出异常,或者直接返回.

    3) create方法: 创建节点时,如果节点的父节点不存在,我期望同时也要创建父节点,而不是抛出异常.

    4) data监测: 我需要提供一个额外的功能来补充watch的不足,开启一个线程,间歇性的去zk server获取指定的path的data,并缓存起来..归因与watch可能丢失,以及它不能持续的反应znode数据的每一次变化,所以只能手动去同步获取.

 

I0Itect编程实践:

    1.pom.xml 

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>3.0.7.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.5</version>
	<exclusions>
		<exclusion>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.4</version>
</dependency>

 

    2.Java

ZkClient zkClient = new ZkClient("192.168.0.121:2181",3000);

zkClient.subscribeChildChanges("/worker",new IZkChildListener() {
	@Override
	public void handleChildChange(String parentPath, List<String> children) throws Exception {
		if(children == null){
			System.out.println("<" + parentPath + "> is deleted");
			return;
		}
		for(String child : children){
			System.out.println("<Child>:" + child);
		}
	}
});

   简单易用,值得试用. 

分享到:
评论

相关推荐

    第五届飞思卡尔杯智能汽车竞赛决赛广东工业大学-iTec-技术报告.pdf

    广东工业大学的iTeC团队在这次竞赛中提交了技术报告,主要讲述了他们如何使用CCD相机作为传感器,自动追踪黑线进行无人驾驶的技术实现。 首先,报告提到了智能汽车的典型机电一体化产品特点,即产品设计涉及到机械...

    ITEC-621-Project

    ITEC-621-项目为ITEC 621项目构建的简单回购。 可提供2个Google文档: //docs.google.com/document/d/1XTdTYpejjMYebzhQB11MH_vgtA60Ni817nMxnzeh5xY/edit usp sharing可提供2个附录google doc: ://docs.google....

    ITEC-2560-90-Lab-7

    【标题】"ITEC-2560-90-Lab-7" 是一个与IT教育相关的实验室项目,可能属于某个课程或学习计划的一部分。这个实验室的编号表明它可能是课程ITEC-2560中的第90次实验,重点是编程语言JavaScript。 【描述】虽然"ITEC-...

    2015-Spring-ITEC-335-Software-Testing

    2015 Spring - ITEC 335 - 软件测试 关于这个项目 这是我的 Spring 2015 ITEC 335 软件测试课程的源代码库。 课程中完成的大部分工作包括 BlueJ 和 Eclipse 项目。 关于作者 我是 David Ball,IT 专业和软件工程专业...

    ITEC-3020

    《深入理解ITEC-3020:CSS技术解析与实战应用》 在信息技术领域,ITEC-3020通常被用作一个课程代码,代表着某个特定的IT教育课程。在这个课程中,核心主题是CSS(Cascading Style Sheets),这是一种用于描述HTML或...

    第三课:zookeeper_典型使用场景实践(预习)1

    import org.I0Itec.zkclient.ZkClient; //...其他导入 public class Agent { private ZkClient zkClient; private static final String rootPath = "/tuling-manger"; private static final String servicePath...

    ITEC2560-Assignment6-ISSMap.html:国际空间站地图

    《国际空间站地图——深入解析ITEC2560-Assignment6-ISSMap.html》 在信息技术领域,HTML(超文本标记语言)是构建网页内容的基础。本篇将围绕"ITEC2560-Assignment6-ISSMap.html"这一主题,深入探讨如何使用HTML来...

    itec325-project

    itec325-项目 团队成员:-迈克尔·戴维斯(Michael Davis)-布兰登·沃尔夫(Brandon Wolfe)-阿什莉·迪克森(Ashley Dickerson) 项目描述: 一个基于位置的Web应用程序,它将帮助用户找到吃饭的地方。我们的应用...

    demo-itec

    由于提供的标签为空,我们无法直接获取特定的技术栈信息,但我们可以从"demo-itec-main"这个压缩包子文件名推断,它可能包含项目的主代码库或者主要模块。 在IT行业中,一个演示项目可能涵盖以下知识点: 1. **...

    ITEC334:ITEC334页面

    ITEC334页面主要涉及的是HTML(HyperText Markup Language)这一核心的网页制作语言,它是构建互联网上大部分内容的基础。HTML允许开发者通过结构化的标签来组织文本、图像和其他多媒体资源,创建出交互式的网页。在...

    ITEC3020:一个包含ITEC3020所有任务的仓库

    ITEC3020是一个可能代表大学课程代码的标识,暗示这个压缩包是为学习或教学ITEC3020课程的学生和教师准备的资源集合。这个仓库包含了该课程的所有任务,意味着它可能涵盖了一系列的项目、作业、实验或者实践活动,...

    锂离子电池充电器模型:设计的模型是具有 5 级恒流控制的 48V 至 25V 双向升压转换器。-matlab开发

    在充电状态期间,使用 5 级恒流控制作为充电时间,发现多 (5) 级恒流控制 (MSCCC) 的充电优于恒流恒压方法(参考文件: https://doi. org/10.1109/ITEC-AP.2016.7512982 ) 直流负载电压在充电和放电阶段均设置为...

    itec3860_social:佐治亚格威内特学院 ITEC 38603870 代码社交

    itec3860_social - ITEC 3860 的代码社交指示分叉存储库添加上游作为新的远程仓库: git remote add upstream https://github.com/ggc-itec/itec3860_social.git 确保遥控器设置正确: git remote -v 添加带有您的...

    SparkStreaming和kafka的整合.pdf

    import org.I0Itec.zkclient.ZkClient import org.apache.spark.SparkConf import org.apache.spark.streaming.dstream.{DStream, InputDStream} import org.apache.spark.streaming.kafka.{HasOffsetRanges, ...

    嵌入式车道控制机培训.pptx

    嵌入式车道控制机是高速公路收费站自动化的核心设备,主要由ELC-14482-A型车道控制机和ITEC-D14482-A型工控机组成,配合EN-ELC-31型车道机柜共同运作。工控机作为控制中心,运行车道收费软件,管理各种外围设备,...

    ITEC225

    【ITEC225】是一门信息技术相关的课程,可能涵盖了计算机科学、软件工程、网络技术等多个方面的内容。虽然没有提供具体的描述和标签,但我们可以基于常见的IT课程结构来推测这门课程可能涉及的关键知识点。 首先,...

    itec3020:ITEC 3020的网页设计

    itec3020 ITEC 3020的Web设计在本次作业中,要求您使用适当HTML和CSS在网上商店中创建产品页面。 使用CSS来吸引用户的方式来样式化您的网站非常重要。 您的作业应包括: 在开始制作网页之前制作的网页草图一个index....

    嵌入式车道控制机培训教材.pptx

    1. 嵌入式车道控制机型号为ELC-14482-A,工控机型号为ITEC-D14482-A,两者构成了车道控制的核心。 2. 车道机柜(EN-ELC-31)用于容纳工控机并承载收费车道的强弱电接入及控制信号传递。 3. 车道外围设备包括视频设备...

    itec225:我的itec225类公共文件

    itec225 我的itec225类公共文件此存储库专门用于保存我们的讲师Freeman lo提供的文件:github / freemanbach

Global site tag (gtag.js) - Google Analytics