基于ZOOKEEPER实现分布式锁

获得锁的规则: 当前列表中序号最小  && 当前列表中序号最小 == 我自己创建的节点 

 

 

基本思想:

 

数据同步:
客户端A更改了付款状态为已经付款状态,
客户端B去获取付款状态立刻返回已经付款状态。进实时

数据监听:
在客户端A监听付款状态节点,在客户端B更改付款状态节点的数据,
客户端A马上收到通知信息。
监听器监听一次就失效了。需要重新监听。

分布式锁实现:
1.创建一个永久父节点A
2.客户端启动后创建一个自己的临时节点带自增序号的放在A下
3.获取A节点下的节点列表.SIZE = 1 就是自己刚创建的直接使用(获得锁)
3.1 排序节点列表取最小的一个节点和自己比较如果最小的节点 == 自己创建的节点(获得锁)

4.执行自己的业务功能
5.释放锁(删除自己创建的节点)、临时锁断开后ZK也会删除
6.创建锁 执行2
7. 和3 一样的逻辑 监听父节点A下的节点类型变化为 节点修改类型的通知 有变动再去获取比较(粗糙实现)
8.监听当前比自己小的节点 ,比自己小 的节点有变化,下一个就是自己啦。(排队1-100 自己99号 监听98号)

 

posted @ 2019-07-30 09:29  马鞍山  阅读(151)  评论(0编辑  收藏  举报