使用 ZooKeeper 实现分布式锁

参考 Apache ZooKeeperDockerHubApache Curator无羊群效应的简单锁

1
2
3
docker run --name some-zookeeper --restart always -p 2181:2181 -d zookeeper
docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
docker rm -f some-zookeeper
1
help, ls -s /, create /zk_test my_data, get /zk_test, set /zk_test junk, delete /zk_test, quit
1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.9.0</version>
</dependency>

<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.9.0</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
try (CuratorFramework client = CuratorFrameworkFactory.newClient(
"192.168.2.9:2181",
new ExponentialBackoffRetry(1000, 3)
)) {
client.start();
InterProcessMutex lock = new InterProcessMutex(client, "/lock");
try {
lock.acquire();
try {
// ...
} finally {
lock.release();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}