文档章节

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

woshixin
 woshixin
发布于 2017/09/08 22:32
字数 644
阅读 414
收藏 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
粉丝 22
博文 209
码字总数 184949
作品 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的集群配置和Java测试程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50848555 概述 Zookeeper是Apache下的项目之一,倾向于对大型应用的协同维护管理工作...

单红宇
2016/03/10
0
0
ZooKeeper学习笔记六 ZooKeeper开源客户端Curator

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

xundh
04/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
34
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部