排它锁
定义锁:
通过zookeeper上的数据节点来表示一个锁,例如/exclusive_lock/lock节点就可以定义为一个锁。
获取锁:
在获取排它锁时,所有的客户端都试图在/exclusive_lock节点下创建临时子节点/exclusive_lock/lock
1)只有一个客户端能够创建成功,那么就认为该客户端获取了锁。
2)同时,没有获取到锁的客户端需要到/exclusive_lock 节点上注册一个子节点变更的watcher监听,以便实时的获取到lock节点的变更情况。
释放锁:
在定义锁的时候,/exclusive_lock/lock是一个临时节点,在以下情况下,会释放锁:
1)当前获取锁的客户端发生宕机,zookeeper上的这个临时节点就会被移除
2)正常执行完业务逻辑后,客户端就会主动将自己创建的临时节点删除
移除lock节点,zookeeper就会通知所有在/exclusive_lock节点上注册子节点变更watcher监听的客户端。
这些客户端在接受到通知后,再次重新发起分布式锁的获取。
原文:https://www.cnblogs.com/zrzct/p/14133330.html