本文共 1727 字,大约阅读时间需要 5 分钟。
ZK 实现分布式锁的原理是使用临时节点+事件通知的方式实现,实现思路如下:
1、多个客户端在 ZK 上创建临时节点。 2、因为临时节点的路径是唯一的,所以只能有一个创建成功,哪个客户端能创建成功就能获得锁。 3、当一个客户端创建节点后,其他客户端只能等待。 4、当一个客户端执行完逻辑后,删除节点。 5、其他客户端监听到节点被删除,则去争夺资源创建节点。这里基于 curator 框架简单实现
org.apache.curator curator-framework 4.0.0 org.apache.curator curator-recipes 4.0.0
public class Lock { public static void main(String[] args) { CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("10.13.1.171:2181", 5000, 4000, new ExponentialBackoffRetry(1000, 3)); curatorFramework.start(); InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/lock"); for (int i = 0; i < 10; i++) { new Thread(() -> { System.out.println(Thread.currentThread().getName() + "尝试获得锁"); try { lock.acquire(); System.out.println(Thread.currentThread().getName() + "获得锁"); } catch (Exception e) { e.printStackTrace(); } try { Thread.sleep(2000); lock.release(); System.out.println(Thread.currentThread().getName() + "释放锁 >>>"); } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }).start(); } }}
https://github.com/huangliangyun/Spring-Boot-2.X/tree/master/spring-boot-zookeeper
公众号:【星尘Pro】
github:
推荐阅读
转载地址:http://cyfsi.baihongyu.com/