文档章节

zookeeper学习之zkclient事件监听<十>

woshixin
 woshixin
发布于 2017/09/08 22:32
字数 644
阅读 306
收藏 0
点赞 0
评论 0

在前面说的原来的zk的java api中,提供了watcher的机智监听节点,zkclient将之转换成Listener的概念,就是订阅服务端的事件。

下面一个小程序,简单验证一下节点的监听

日志输出: 一目了然

来看看注册的监听,IZkChildListener,这个接口一个方法handleChildChange,两个参数

parentPath:节点变动的通知父节点路径

currentChilds:子节点路径们

其实一个节点不存在也是可以先设置监听的,只是这边zk-xin已经存在了,所以没写而已

而且这边订阅后,不用反复注册(不像api自带的那种,因为watcher是一次性的)

另一个订阅监听事件是节点数据变更,实现下面两个方法就行啦,数据变化包含数据内容和版本概念

还有一个关于连接的监听,可以监听连接状态的变化,还有session是否改变,这样做的目的可能是为了注册临时节点吧,就像dubbo服务的注册。

zkclient的打包的结构:

exception:放的都是异常类

serialize:放的是序列化实现,这边有两个实现ZkSerializer接口的类,默认是SerializableSerializer,另一个是BytesPushThroughSerializer相当于什么都没干,byte[]与object的互换而已。

另外一些是具体要参与工作的类

下面来看看订阅事件的实现,这边用了同步锁,这样的话不能同时注册多个吗?当然对zklient是没影响,因为与数据监听和状态监听使用不同的同步对象控制,不同的zklient实现,当然就更没影响啦。

这边主要执行了watchForChilds方法,这边启动一个线程,线程内先执行exists方法,后执行获取子节点的操作,其他的也是类似

既然注册了时间,总要有人去做这件事情吧,可以看到ZkClient 实现了接口org.apache.zookeeper.Watcher,watcher有个抽象方法abstract public void process(WatchedEvent event);

下面是zkclient的实现,先判断事件的类型,然后执行不同的操作,比如上面的子节点监听,和执行processDataOrChildChange(event);

子节点的变更后面执行的是ireChildChangedEvents(path, childListeners);

最后干苦力的是ZkEvent方法,这边执行了一下List<String> children = getChildren(path);重新获取了节点数据

还有就是不监听啦,就是吧对应的listener移除

 

祝大家周末愉快,我要加班 加班啊

 

© 著作权归作者所有

共有 人打赏支持
woshixin
粉丝 21
博文 171
码字总数 143350
作品 0
杭州
程序员
ZooKeeper学习笔记五 ZooKeeper开源客户端ZkClient

本文学习资源来自《从Paxos到ZooKeeper分布式一致性原理与实践》 ZkClient ZkClient 在ZooKeeper原生API接口之上进行了封装,是一个更易用的ZooKeeper客户端。同时,ZkClient在内部实现了诸如...

xundh
04/28
0
0
ZooKeeper 使用 ZKClient 获取子节点列表

ZkClient 是一个开源软件,也托管在 github。它封装了 zookeeper 原生 API。 使用 先需要在 javaws 网站上下载 ZKClient 的 jar 包。 注意 中的 IP 地址应该和 中配置的 IP 地址一致,且在 ...

兔之
2015/10/27
0
0
zookeeper实现分布式锁

首先我们需要搭建至少三台zookeeper服务器,并且配置好,然后才能成功启动zookeeper。 zookeeper主要作用是存储管理节点和监听节点。实现分布式锁的核心就是利用存储临时节点,监听事件去对锁...

码家EDU
2017/10/29
0
0
ZooKeeper学习笔记六 ZooKeeper开源客户端Curator

本文学习资源来自《从Paxos到ZooKeeper分布式一致性原理与实践》 Curator Curator是Netflix公司开源的一套ZooKeeper客户端框架,作者是Jordan Zimmerman。 和ZkClient一样,Curator解决了很多...

xundh
04/28
0
0
zk系列-c++下zookeeper使用实例

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。分布式应用可以使用它来实现诸如:统一命名服务、配置管理、分布式锁服务、集群管理等功能。公司常用到的是Java服务集群的管理...

涩女郎
2015/08/12
0
0
高性能 RPC 框架 Dubbo 从入门到深入-服务注册中心搭建(详细)

一、前言 整体来说,一个公司业务系统的演进流程基本都是从单体应用到多应用。在单体应用时,不同业务模块相互调用直接在本地 JVM 进程内就可以完成,而变为多个应用时,相互之间进行通信的方...

加多
01/26
0
0
分布式利器Zookeeper(三)

前言 《分布式利器Zookeeper(一)》 《分布式利器Zookeeper(二):分布式锁》 本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、...

zfz_linux_boy
07/01
0
0
ZooKeeper实现分布式锁

1.基于ZooKeeper分布式锁的流程 2.实现 zookeeper系列(五)实战分布式锁 3.简单实现

Cobbage
07/01
0
0
淘宝SOA框架dubbo学习(2)--搭建Zookeeper注册中心服务

继上一篇博文, 淘宝SOA框架dubbo学习(1) http://my.oschina.net/hanshubo/blog/374974 1、下载 Zookeeper 下载页面地址: http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/ 注:下......

宁宁爸
2015/02/04
0
1
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql导入导出包括函数或者存储过程

mysql导入导出包括函数或者存储过程 2012-11-16 10:12:20 0个评论 收藏 我要投稿 mysql导入导出包括函数或者存储过程 1.mysql导出整个数据库 mysqldump -h hostname -u username -p databas...

rootliu
3分钟前
0
0
Hyperledger Fabric 客户端开发一

前面介绍了hyperledger Fabric 安装, Chaincode的开发和运维, 现在来说说hyperledger fabric的客户端相关的开发。hyperledger 的客户端开发, 实际上指的是Chaincode的客户端开发。 同传统...

十一月不远
7分钟前
0
0
第18章 Linux集群架构

keepalived介绍 在这里使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果 heartbeat 切换的时候,会不是很及时——>比如:主 已经宕机了,但 从 却一直启动...

Linux学习笔记
8分钟前
0
0
awk常用的几条命令组合

前言 最近在生产上查问题,也是练就了一下awk的命令。 生产上的数据安全性要求比较高,一般要拿到测试环境都需要脱敏,但是脱敏的数据会有很多程序上的不适应。 所以有时候查询问题,查询一条...

码代码的小司机
8分钟前
0
0
python 多版本安装及切换

1.安装必要的扩展 # yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-de 2.下载python3.7源码 # wget https://www.python.org/ftp/python......

青-争
9分钟前
0
0
看看8年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。虽然微服务架构没有公认的技术标...

Java大蜗牛
9分钟前
0
0
CDH的坑之Sqoop导出数据到MySQL

CDH的坑之Sqoop导出数据到MySQL 最近使用Sqoop从Hive导出数据到MySQL中,出现了一系列的问题,下面将这个问题记录一下,避免再度踩坑! 导出语句 sqoop export --connect jdbc:mysql://192....

星汉
12分钟前
0
0
PowerDesigner连接MySQL和逆向工程图

最近想梳理公司项目的表间关系,从项目后台管理系统的操作入手,以及代码的hibernate注解入手,都不算特别尽人意,于是最后还是鼓捣了一下PowerDesigner的逆向工程图,这样更直观一些。 想着...

Oo若离oO
13分钟前
0
0
威胁web应用安全的错误

一般绝大部分的web应用攻击都是没特定目标的大范围漏洞扫描,只有少数攻击确实是为入侵特定目标而进行的针对性尝试。这两种攻击都非常频繁,难以准确检测出来,许多网站的web应用防火墙都无法...

上树的熊
15分钟前
2
0
pypy2 install crypto error

install pycryptodome instead pip install pycryptodome

coord
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部