Zookeeper3.5.7版本—— Curator框架实现分布式锁案例

news/2024/5/16 23:40:04/文章来源:https://blog.csdn.net/li1325169021/article/details/129771590

目录

    • 一、Zookeeper原生的 Java API 存在的问题
    • 二、Zookeeper原生的 Java API 存在问题的解决方式
    • 三、Curator框架实现分布式锁示例代码
      • 3.1、pom文件添加依赖
      • 3.2、示例代码
      • 3.3、Curator框架实现分布式锁测试

一、Zookeeper原生的 Java API 存在的问题

  • 会话连接是异步的,需要自己去处理。比如使用 CountDownLatch。
  • Watch 需要重复注册,不然就不能生效。
  • 开发的复杂性还是比较高的。
  • 不支持多节点删除和创建,需要自己去递归。

二、Zookeeper原生的 Java API 存在问题的解决方式

  • Curator 是一个专门解决分布式锁的框架,解决了原生Java API开发分布式遇到的问题。

三、Curator框架实现分布式锁示例代码

3.1、pom文件添加依赖

  • pom文件依赖

    <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>
    

3.2、示例代码

  • 代码

    package com.xz.case3;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;public class CuratorLockTest {public static void main(String[] args) {// 创建分布式锁1InterProcessMutex lock1 = new InterProcessMutex(getCuratorFramework(), "/locks");// 创建分布式锁2InterProcessMutex lock2 = new InterProcessMutex(getCuratorFramework(), "/locks");new Thread(new Runnable() {@Overridepublic void run() {try {// 获取锁对象lock1.acquire();System.out.println("线程1 获取到锁");// 测试锁重入lock1.acquire();System.out.println("线程1 再次获取到锁");Thread.sleep(5 * 1000);// 释放锁对象lock1.release();System.out.println("线程1 释放锁");// 再次释放锁对象lock1.release();System.out.println("线程1  再次释放锁");} catch (Exception e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {@Overridepublic void run() {try {lock2.acquire();System.out.println("线程2 获取到锁");lock2.acquire();System.out.println("线程2 再次获取到锁");Thread.sleep(5 * 1000);lock2.release();System.out.println("线程2 释放锁");lock2.release();System.out.println("线程2  再次释放锁");} catch (Exception e) {e.printStackTrace();}}}).start();}/*** 分布式锁初始化*/private static CuratorFramework getCuratorFramework() {//重试策略,初试时间 3 秒,重试 3 次ExponentialBackoffRetry policy = new ExponentialBackoffRetry(3000, 3);// 通过工厂创建 CuratorCuratorFramework client = CuratorFrameworkFactory.builder().connectString("192.168.136.26:2181").connectionTimeoutMs(200000).sessionTimeoutMs(20000).retryPolicy(policy).build();// 启动客户端client.start();System.out.println("zookeeper初始化完成");return client;}
    }
    

3.3、Curator框架实现分布式锁测试

  • 启动CuratorLockTest,查看idea控制台变化
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_87344.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes为容器和 Pods 分配 CPU 资源

Kubernetes为容器和 Pods 分配 CPU 资源 一、指定CPU请求和CPU限制 1、创建一个命名空间&#xff08;namespace&#xff09; [rootmaster ~]# kubectl create namespace cpu-example namespace/cpu-example created2、编写yaml文件 要为容器指定CPU请求&#xff0c;需要在容…

STC32G 比较器及其应用编程

一 STC32G系列单片机寄存器简介STC32G系列单片机内部集成了一个比较器&#xff0c;其正极可以在P3.7、P5.0、P5.1、或者ADC的模拟输入通道间切换&#xff1b;而负极可以是P3.7或者内部BandGap经过OP的REF电压。通过配置分时复用可以实现多个比较器的应用。STC32G系列单片机的比…

MySQL数据库基础到进阶笔记整理包含事务、SQL优化、锁等内容

写在前面 本文是在学习MySQL数据库时整理的笔记&#xff0c;可供初学者学习 是在https://dhc.pythonanywhere.com/entry/share/?key12e4a7324f68371db3984d93e26e458962a4f0bc188ec23ec70637a4f3b4d58f 笔记基础上增加了一些内容以及后续的锁、InnoDB引擎等内容 课程参考b站黑…

Java数据结构与算法----搜索篇(DFS与BFS)

一.概念DFS&#xff08;Depth First Search&#xff09;深度优先搜索 和BFS&#xff08;Breadth First Search&#xff09;广度优先搜索 是两种广泛应用于搜索和遍历算法中的基本技术。这两种算法都涉及到搜索数据结构中的节点 。这里我们以二叉树为例&#xff0c;简单地图解一…

实验九 TSP问题

《算法设计与分析》实验报告 所在院系 计算机与信息工程学院 学生学号 学生姓名 年级专业 2020级计算机科学与技术 授课教师 彭绪富 学 期 2022-2023学年第一学期 提交时间 2022年10月26日 目 录 实验九-1&#xff1a;TSP问题 一、实验目的与要求 二…

【图解http】

目录了解web及网络基础TCP/IP协议族与HTTP关系密切的协议&#xff1a;IP、TCP和DNS各种协议与HTTP协议的关系URI和URLhttp协议HTTP是不保存状态的协议请求URI定位资源告知服务器意图的HTTP方法持久连接节省通信量HTTP报文编码提升传输速率压缩传输的内容编码分割发送的分块传输…

关于参加新星计划的收获

目录 作者简介 前言 一、新星计划介绍 二、新星计划创作目标 &#xff08;一&#xff09;创作打卡阶段第1周&#xff08;3/13-3/19&#xff09; &#xff08;二&#xff09;创作打卡阶段第2周&#xff08;3/20-3/26&#xff09; 三、参赛文章的构思与创作 &#xff08…

Go map 内存泄露

前言 在Go中, map这个结构使用的频率还是比较高的. 其实在所有的语言中, map使用的频率都是很高的. 之前在使用中, 一直都知道map的内存在元素删除的时候不会回收, 但一直没有仔细的研究为什么. 今天就来好好揣摩揣摩. func main() {m : make(map[int][128]byte)for i : 0; …

2023热门抖音权重查询小程序源码

2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样&#xff0c;小程序适配优化。接口免费。小程序不是网页 修改教程: 1&#xff0c;如果想修改或者去除水印&#xff0c;直接删除或修改“index.html”12&#xff5e;22行 2&#xff0c;如果想修改logo&#xff0c;直接…

“全球首款旗舰”填补行业空白,两轮电动车技术创新为何只看绿源?

作者 | 曾响铃 文 | 响铃说 乒乓作为我们的“国球”&#xff0c;在数不清的体育赛事里书写辉煌战绩&#xff0c;也进一步被国人熟知、热爱。更难能可贵的是“国球”精神&#xff1a;“别人可能练了一千次&#xff0c;而我们却练了一万次”&#xff0c;冠军品质&#xff0c;奋…

MYSQL【基础篇】MYSQL 主要函数

MySQL中的函数主要分为以下四类&#xff1a; 字符串函数、数值函数、日期函数、流程函数 ​MySQL函数是MySQL数据库提供的内部函数。这些内部函数可以帮助用户更加方便的处理表中的数据 MySQL函数可以对表中数据进行相应的处理&#xff0c;以便得到用户希望得到的数据。这些函…

JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的&#xff1a;服务器无法区分这两个请求是同一个客户端发过来的&#xff0c;还是不同的客户端发过来的 现实问题&#xff1a;第一次请求是添加商品到购物车&#x…

C++中的string类【详细分析及模拟实现】

string类 目录string类一、stirng的介绍及使用1.为什么学习string类&#xff1f;2.标准库中的string类2.1 引入&#xff1a;编码2.2 basic_string3.string类的使用3.1 构造函数3.2 遍历string方式1&#xff1a;for循环方式2&#xff1a;范围for4.迭代器4.1 正向迭代器4.2反向迭…

Golang流媒体实战之二:回源

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 今天的实战是流传输过程中的常见功能&#xff1a;回源如下图&#xff0c;lal(源站)和lal(拉流节点)代表两台电脑&#xff0c;上面都部署了lalVLC在…

【蓝桥杯】巧克力

问题描述&#xff1a; 题解分析&#xff1a; 错误思想&#xff1a;本来的想法是先使用低价格的巧克力&#xff0c;并且判断需要吃几块【其中内容比较细】&#xff0c;直接计算即可&#xff0c;但是本题好像不可以用简单的最小价格的贪心来做 正确思路&#xff1a;创建一个结…

【内网安全】 横向移动IPCATSC命令Impacket套件CS插件全自动

文章目录域信息收集-目标&用户&凭据&网络域横向移动-IPC-命令版-AT&schtasks上线配置at < Windows2012 (该版本之前的操作系统使用at命令)补充反向连接上线效果图schtasks >Windows2012(适用于windows2012后的操作系统版本)建立IPC常见的错误代码域横向移…

【MySQL】JDBC---数据库编程

目录JDBC介绍准备工作操作数据库本文介绍 java 如何使用 jdbc 连接数据库以及连接数据库后的基本操作。JDBC介绍 首先来了解 JDBC(Java Database Connectivity)&#xff0c;java数据库连接。是 Java 提供一套用于操作数据库的接口 API&#xff0c;是 Java 中的数据库连接规范&…

Chapter8.2:PID控制器设计及MATLAB_SIMULINK应用

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…

Flink-FinkSQL进阶操作(系统函数,UDF,表聚合函数等,输入kafka,elasticsearch等外部系统)

11.7 函数 11.7.1 系统函数 标量函数 只有数值大小&#xff0c;没有方向的量&#xff0c;行变行 比较函数 逻辑函数 算数函数 字符串函数 时间函数 聚合函数 多行变一行 count(),sum(),rank(),row_number() 11.7.2 自定义函数(UDF) 分类 标量函数&#xff0c;聚合函…

【数据结构】二叉树及相关习题详解

新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…