本文基于Curator开源框架,建议用封装好分布式锁实现,快捷省事儿
两个客户端争抢zk分布式锁(zk锁,锁zk节点)
1、创建临时顺序节点(zk中概念),如A抢先,加锁请求,直接"my_lock"锁节点下,创建顺序节点,有zk内部自行维护节点序号,从1开始逐次递增(第一个叫xxx-000001。第二个xxx-000002。)如下:
2、A判断是不是第一个节点:建完会查一下"my_lock"锁节点下的所有子节点,是,加锁成功!
3、A都加完锁,B来加锁了,同理:先在"my_lock"锁节点下创建临时顺序节点,名字类似于:
4、不是第一个,加锁失败!,对他上一个顺序节A点加一个监听器(通过ZK的API),监听是否被删除等
5、A加锁之后,可能处理代码逻辑,释放锁:删除zk里创建的那个顺序节点,B重新获取,加锁成功
总结
1、创建锁节点下,一个接一个临时顺序节点;不是第一个点,就对上一个节点加监听器,排队
2、好处:如创建临时顺序节点后,自己宕机也没关系,zk感知宕机,自动删除对应临时顺序节点,释放锁或取消自己排队
3、用Curator加锁和释放锁过程:
https://blog.csdn.net/laokerr/article/details/88955932