超级白话说Zookeeper(二) 监听事件

上一篇我说到了,Zookeeper实现简单的分布式锁,说到了Zookeeper中的四种节点类型以及他们的特性。说到了Zookeeper的文件结构(我就叫他文件结构,不管其他sb怎么叫,不爽的给我滚就是了)。

今天说一说监听,看这篇文章之前请把第一篇文章先看了。
第一篇文章说到了,几台电脑争锁去访问美国某电脑上的文件,我再把例子重新搬过来吧,如下:

电脑1访问美国某电脑文件之前,先去Zookeeper中某目录(例如/readfile)下创建一个顺序文件(所谓顺序文件,就是Zookeeper会为你创建的文件加一个顺序号,这个序号由时间先后顺序递增),名字叫“我要访问A文件+顺序号”
电脑2访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”
电脑3访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”

假设现在三台电脑创建了三个文件,分别是:
电脑1创建的:我要访问A文件00000000001
电脑2创建的:我要访问A文件00000000003
电脑3创建的:我要访问A文件00000000002

由于电脑1序号最小,所以他抢到了锁并且去读了美国某服务器的文件,当电脑1读文件结束并且关闭与Zookeeper的连接之后,电脑1创建的”我要访问A文件00000000001 “节点被Zookeeper自动删除。这个时候其他节点需要根据序号排序,重新竞争锁,其实过程并不是麻烦,而是:
在最开始的时候,电脑1,2,3同时去Zookeeper创建节点,电脑1发现自己的序号最小,ok拿到锁,获取文件访问权,这个时候电脑2,电脑3发现,自己序号不是最小的,那么怎么办呢?电脑3的序号是02,他会去监听比他序号小且离他最近的电脑1所创建的节点:‘我要访问A文件00000000001 ’,监听这个节点的删除事件(所谓监听删除事件是指:当被监视的节点被删除的时候,监听者将会收到通知),那么当电脑1断开与Zookeeper的连接后,电脑1创建的节点被Zookeeper自动删除了,那么电脑3自然会监听到这个事件,所以当电脑3监听到此删除事件的时候,他就获得锁了。
电脑2同理,他会去监听电脑3的删除事件,当电脑3删除的时候,电脑2就会获得锁。

监听的特性是Zookeeper提供的,一共可以监听三种类型:
节点的创建,节点的删除,节点的更新。
同时可以监听某个节点的子节点的事件。例如:
/
···········/zk
·················/niubi
我们可以对zk设置监听事件 监听他的子节点的创建or删除or更新事件,例如上面看到的,我创建一个niubi节点,监听者同样能监听到zk的目录下的事件发生。
这里监听者值的是程序,或者CLI,总是使用Zookeeper提供服务的客户端在某节点设置了监听事件,这样的程序或者CLI都叫监听者。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值