Zookeeper 分布式事务锁的使用
2024-10-16 17:55:02
使用Netflix的包 curator-recipes
pom文件引入相关依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
使用范例:
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
......
private static final String SIT_ZK_IP_PORT = "10.82.232.9xx:2181,10.82.232.9xx:2181,10.82.2329xx68:2181";
public static void main(String[] args) throws Exception {
//创建zookeeper客户端连接
//重试策略, 参数1:等待时间, 参数2:重试次数
RetryPolicy policy = new ExponentialBackoffRetry(2000, 3);
final String ZK_IP_PORT = SIT_ZK_IP_PORT;
CuratorFramework client = CuratorFrameworkFactory.builder().connectString(ZK_IP_PORT).retryPolicy(policy).build();
client.start();
final InterProcessMutex mutex = new InterProcessMutex(client, "/fruit-history-package-lock");
long startTime = 0L;
try {
System.out.println("==== 开始抢锁.... ");
mutex.acquire();
startTime = System.currentTimeMillis();
System.out.println("==== 抢到锁, 开始执行.... ");
// 自己的搬砖逻辑
doXX();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("执行抛异常,请检查", e);
} finally {
try {
mutex.release();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("==== 执行完毕, 释放锁....耗时: " + (System.currentTimeMillis() - startTime)/1000 + "秒");
}
}
会在zk上创建临时节点 fruit-history-package-lock, 并在该节点下创建顺序临时节点用于锁机制的排队
最新文章
- Mysql 索引实现原理. 聚集索引, 非聚集索引
- Leetcode: Line Reflection
- IOS 关于开发的APP跳转第三方应用的心得
- 繁华模拟赛 Evensgn玩序列
- mac 显示隐藏文件夹
- Oracle 中的 TO_DATE 和 TO_CHAR 函数
- 【LeetCode】231 - Power of Two
- 注册flash.ocx inno setup (转)
- windows下Eclipse安装Perl插件教程
- 单点登录SSO原则的实现
- 使用MBROSTool 工具制作U盘多启动盘的方法总结
- Java字符串中常用字符占用字节数
- windows每天备份文件的bat脚本【原创】
- MSDE2008安装备忘
- json jmespath的使用
- JavaScript中的Generator函数
- 046、创建Docker Machine(2019-03-11 周一)
- 安装rlwrap 的简单方法
- 2018.10.26 NOIP模拟 瓶子 (dp/贪心)
- idea 映射文件同class文件一起打包安装