(1)插入maven依赖
dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>4.3.0</version>
</dependency>
(2)建立分布式锁对象CuratorLock
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessLock;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
public class CuratorLock implements Lock {
private String rootNode = "/locks";
//注意修改为自己的IP地址 zookeeper server 列表
private String connectString = "你的ip:2181";
// connection 超时时间
private int connectionTimeout = 20000;
// session 超时时间
private int sessionTimeout = 20000;
private final InterProcessLock lock = new InterProcessMutex(getCuratorFramework(), rootNode);
@Override
public void lock() {
// 创建分布式锁
try {
lock.acquire();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void lockInterruptibly() throws InterruptedException {
}
@Override
public boolean tryLock() {
return false;
}
@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
return false;
}
@Override
public void unlock() {
//释放锁
try {
lock.release();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public Condition newCondition() {
return null;
}
public CuratorFramework getCuratorFramework(){
//重试策略,初试时间 3 秒,重试 3 次
RetryPolicy policy = new ExponentialBackoffRetry(3000, 3);
//通过工厂创建 Curator
CuratorFramework client =
CuratorFrameworkFactory.builder()
.connectString(connectString)
.connectionTimeoutMs(connectionTimeout)
.sessionTimeoutMs(sessionTimeout)
.retryPolicy(policy).build();
//开启连接
client.start();
return client;
}
}