如何进行Zookeeper分布式锁的代码实现
admin
2023-03-23 04:41:01
0

前言

Zookeeper分布式锁的代码实现

在上一篇博客中,从思路上已经分析了Zookeeper如何帮助我们实现分布式锁,我们直接来看代码:

[分布式客户端]

如何进行Zookeeper分布式锁的代码实现

[获取分布式锁的方法lock:初始化ZK]

如何进行Zookeeper分布式锁的代码实现

[获取分布式锁的方法lock:创建临时节点与判断最小路径]

如何进行Zookeeper分布式锁的代码实现

[main测试]

如何进行Zookeeper分布式锁的代码实现

[运行结果]

如何进行Zookeeper分布式锁的代码实现

需要注意的是,即便监控到了比自己序号小的节点的删除Watcher,也需要再次确认下!

从结果上,看的很清楚,各个线程有序获得锁。

zkclient

zkclient是在zookeeper原生API基础上做了一点封装,简化了ZK的复杂性。

来看代码:

如何进行Zookeeper分布式锁的代码实现

我们观察下zkclient的使用,和以前基于zookeeper的原生API有哪些区别呢?

第一,原生API需要我们利用CountDownLatch来确保ZK的初始化,现在zkclient帮助我们屏蔽掉了这个细节

第二,原生API是不可以递归创建节点的,而zkclient可以帮助我们递归创建不存在的父节点,还可以递归删除

第三,支持序列化操作,上面的代码你大概可以看出一些端倪,就是我们从操作byte[]到操作String了。(事实上,在zkclient中你只需要实现ZkSerializer接口,就可以完成Object到byte[]的转换,虽然如此,但是实际开发中,利用JSON也挺好的!)

第四,还有最重要的一点就是,zkclient将对节点的操作和对节点的监控分离开了,在原生API中2者是耦合在一起的!从思想上来看,便于理解;从代码上来看,也简洁些(如果写在一起,头都大了);更加方便的是,zkclient替我们完成了重复watch的功能!

[watch订阅机制]

如何进行Zookeeper分布式锁的代码实现

看到没有,是不是有点像MQ的订阅机制,非常好用!【但是也有点不太完美,子节点的数据变更为什么没有监控呢,这有点不符合人性啊!还好有Curator...】

但是呢,我们知道ZK是有很多应用场景的,比如实现分布式锁,zkclient并没有替我们进行封装,但是Curator框架可以帮助我们做到!

Curator

为了更好实现Java操作Zookeeper服务器,后来出现Curator框架,功能非常强大,目前已经是Apache的顶级项目,有很多丰富的特性,比如session超时重连,主从选举,分布式计数器,分布式锁等,非常有利于Zookeeper复杂场景下的开发。

POM文件:

如何进行Zookeeper分布式锁的代码实现

增删改查:

如何进行Zookeeper分布式锁的代码实现Curator框架使用链式编程风格,易读性很强!

注意,不论是原生的API,还是基于zkclient的API,都是提供的connectTimeout,而Curator提供了sessionTimeout,功能很强大。

如何进行Zookeeper分布式锁的代码实现

无论是原生的API,还是zkclient,都是支持异步回调的,但是Curator框架在支持异步回调的同时,增加了线程池供我们优化!

[NodeCacheListener]

如何进行Zookeeper分布式锁的代码实现

[PathChildrenCacheListener]

如何进行Zookeeper分布式锁的代码实现

对于Curator而言,为了解决重复Watch的问题,它引入了一种全新的思想:Cache与ZK SERVER比对的机制。不论是原生的API,还是基于ZKCLIENT的,其实它们解决思路都是重复注册!

思路决定出路!Curator通过事件驱动将客户端的Cache与ZK SERVER的数据比对,就自然而然的解决了重复WATCH的功能!为什么Curator能成为Apache的顶级项目呢,我想大概就是因为它的与众不同的设计思想!

在Curator中,有2种Listener,一个是监控节点的NodeCacheListener,一个是监控子节点的PathChildrenCacheListener。PathChildernCacheListener可以监控子节点的新增、修改、删除,非常好用!

相关内容

热门资讯

司机因操作不当引发车祸致2死6... 极目新闻记者 谢茂5月10日13时40分许,重庆黔江区一处十字路口发生一起交通事故。据重庆市公安局黔...
中国公民涉嫌非法持有武器,驻泰... 问:泰国警方日前表示,一中国在泰公民涉嫌非法持有武器,泰警方已开展调查。请问中国驻泰国使馆对此有何评...
榴莲商家千里维权,“仅退款”不... 近日,一则“河南商家驱车1600公里赴山东寻找‘仅退款’买家”的消息,引发社会关注。买家被行政拘留5...
原创 魏... 懦夫一生数死,丈夫只死一遭。莎士比亚的这句名言犹如利刃,直刺人心。他用极为尖锐的语言提醒我们:真正的...
三星的撤退与进击 文 | 华商韬略 苏州工业园。 这片土地,承载着三星在中国制造业版图中最具象征意义的记忆。 三十多...
利好!AI、算力,大消息! 重点关注 近日,国家发展改革委主任郑栅洁赴上海人工智能实验室,专题调研人工智能发展情况。 国家网信办...
原创 这... 在繁忙的都市生活中,我们常常被压力和疲惫所困扰。然而,有一种植物,它以其古朴、典雅的姿态,静静地绽放...
两台Figure AI人形机器... IT之家 5 月 9 日消息,当地时间 5 月 8 日,Figure AI 公布了一段视频:两台人形...
首款,成功研制!我国“太极计划... 记者5月9日从中国科学院力学研究所获悉,我国空间引力波探测“太极计划”核心测量系统研制工作取得重要进...
DeepSeek狂融500亿,... 梁文锋终于想通了。 过去一直拒绝融资,但现在则放开手脚。 最新市场消息显示,DeepSeek计划融资...