iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么用springboot+zookeeper实现分布式锁
  • 871
分享到

怎么用springboot+zookeeper实现分布式锁

2023-06-29 14:06:34 871人浏览 独家记忆
摘要

本篇内容主要讲解“怎么用SpringBoot+ZooKeeper实现分布式锁”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用springboot+zookeeper实现分布式锁”吧!Inte

本篇内容主要讲解“怎么用SpringBoot+ZooKeeper实现分布式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用springboot+zookeeper实现分布式锁”吧!

InterProceSSMutex内部实现了zookeeper分布式锁的机制,所以接下来我们尝试使用这个工具来为我们的业务加上分布式锁处理的功能

zookeeper分布式锁的特点:1、分布式 2、公平锁 3、可重入

依赖

<dependency>   <groupId>org.apache.zookeeper</groupId>   <artifactId>zookeeper</artifactId>   <version>3.4.10</version></dependency><!-- zookeeper 客户端 --><dependency>   <groupId>org.apache.curator</groupId>   <artifactId>curator-framework</artifactId>   <version>2.12.0</version></dependency><dependency>   <groupId>org.apache.curator</groupId>   <artifactId>curator-recipes</artifactId>   <version>2.12.0</version></dependency><!-- lombok --><dependency>   <groupId>org.projectlombok</groupId>   <artifactId>lombok</artifactId>   <version>1.18.16</version>   <scope>provided</scope></dependency>

本地封装

这个工具类主要封装CuratorFramework这个client(连接Zookeeper)

@Slf4jpublic class CuratorClientUtil {    private String zookeeperServer;    @Getter    private CuratorFramework client;    public CuratorClientUtil(String zookeeperServer) {        this.zookeeperServer = zookeeperServer;    }  // 创建CuratorFrameworkFactory并且启动    public void init() {       // 重试策略,等待1s,最大重试3次        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);        this.client = CuratorFrameworkFactory.builder()                .connectString(zookeeperServer)                .sessionTimeoutMs(5000)                .connectionTimeoutMs(5000)                .retryPolicy(retryPolicy)                .build();        this.client.start();    }   // 容器关闭,CuratorFrameworkFactory关闭    public void destroy() {        try {            if (Objects.nonNull(getClient())) {                getClient().close();            }        } catch (Exception e) {            log.info("CuratorFramework close error=>{}", e.getMessage());        }    }}

配置

@Configurationpublic class CuratorConfigration {    @Value("${zookeeper.server}")    private String zookeeperServer;    // 注入时,指定initMethod和destroyMethod    @Bean(initMethod = "init", destroyMethod = "destroy")    public CuratorClientUtil curatorClientUtil() {        CuratorClientUtil clientUtil = new CuratorClientUtil(zookeeperServer);        return clientUtil;    }}

测试代码

模拟不同客户端的请求

@Slf4j@RestController@RequestMapping("/test")public class TestController {    // 注入client工具类    @Autowired    private CuratorClientUtil curatorClientUtil;    // 在zookeeper的/rootLock节点下创建锁对应的临时有序节点    private String rootLock = "/rootLock";    @GetMapping("/testLock")    public Object testLock() throws Exception {        // 获取当前线程的名字,方便观察那些线程在获取锁        String threadName = Thread.currentThread().getName();        InterProcessMutex mutex = new InterProcessMutex(curatorClientUtil.getClient(), rootLock);        try {            log.info("{}---获取锁start", threadName);            // 尝试获取锁,最长等待3s,超时放弃获取            boolean lockFlag = mutex.acquire(3000, TimeUnit.SECONDS);            // 获取锁成功,进行业务处理            if (lockFlag) {                log.info("{}---获取锁success", threadName);                // 模拟业务处理,时间为3s                Thread.sleep(3000);            } else {                log.info("{}---获取锁fail", threadName);            }        } catch (Exception e) {            log.info("{}---获取锁异常", threadName);        } finally {            // 业务处理完成,释放锁,唤醒比当前线程创建的节点序号大(最靠近)的线程获取锁            mutex.release();            log.info("{}---锁release", threadName);        }        return "线程:" + threadName + "执行完成";    }}

jmeter测试

我们使用JMeter模拟100个客户端同时并发的访问 localhost:8081/test/testLock,相当于100个客户端争抢分布式锁,结果如图右上角所示,100个请求花了5分6s,每个线程获取到锁后业务处理3s,100个线程理想时间为300s(Thread.sleep(3000)),所以运行时间符合。

怎么用springboot+zookeeper实现分布式锁

怎么用springboot+zookeeper实现分布式锁

zookeeper每个线程在/rooLock节点下创建的临时有序节点如下图,由于是临时的,所以线程释放锁后这些节点也会删除

怎么用springboot+zookeeper实现分布式锁

100个线程程序日志打印

怎么用springboot+zookeeper实现分布式锁

到此,相信大家对“怎么用springboot+zookeeper实现分布式锁”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么用springboot+zookeeper实现分布式锁

本文链接: https://www.lsjlt.com/news/325341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用springboot+zookeeper实现分布式锁
    本篇内容主要讲解“怎么用springboot+zookeeper实现分布式锁”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用springboot+zookeeper实现分布式锁”吧!Inte...
    99+
    2023-06-29
  • 使用Zookeeper实现分布式锁
    目录什么是临时顺序节点?Znode分为四种类型1.持久节点 (PERSISTENT)2.持久节点顺序节点(PERSISTENT_SEQUENTIAL)3.临时节点(EPHEMERAL...
    99+
    2022-11-13
    Zookeeper分布式锁 分布式锁 使用分布式锁
  • ZooKeeper的Curator分布式锁怎么实现
    本篇内容介绍了“ZooKeeper的Curator分布式锁怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Curator中有着更为标准...
    99+
    2023-06-29
  • 基于Zookeeper怎么实现分布式锁
    这篇文章主要介绍“基于Zookeeper怎么实现分布式锁”,在日常操作中,相信很多人在基于Zookeeper怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Zookeeper怎么实现分布式锁...
    99+
    2023-06-22
  • springboot+zookeeper实现分布式锁的示例代码
    目录依赖本地封装配置测试代码JMeter测试InterProcessMutex内部实现了zookeeper分布式锁的机制,所以接下来我们尝试使用这个工具来为我们的业务加上分布式锁处理...
    99+
    2024-04-02
  • ZooKeeper分布式锁的实现方式
    本篇内容介绍了“ZooKeeper分布式锁的实现方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一、分布式锁方案比较二、ZooKeep...
    99+
    2023-06-20
  • Zookeeper如何实现分布式锁
    这篇“Zookeeper如何实现分布式锁”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Zookeeper如何实现分布式锁”文...
    99+
    2023-06-27
  • 分析ZooKeeper分布式锁的实现
    目录一、分布式锁方案比较二、ZooKeeper实现分布式锁2.1、方案一2.2、方案二一、分布式锁方案比较 方案 ...
    99+
    2024-04-02
  • zookeeper分布式锁如何实现
    这篇文章主要介绍“zookeeper分布式锁如何实现”,在日常操作中,相信很多人在zookeeper分布式锁如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”zookeeper分布式锁如何实现”的疑惑有所...
    99+
    2023-06-27
  • redis和zookeeper中怎么实现分布式锁
    redis和zookeeper中怎么实现分布式锁,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。   一、基于redis的分布...
    99+
    2024-04-02
  • Java如何实现ZooKeeper分布式锁
    这篇文章主要介绍了Java如何实现ZooKeeper分布式锁,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是分布式锁在我们进行单机应用开发,涉及并发同步的时候,我们往往采...
    99+
    2023-06-29
  • InterProcessMutex实现zookeeper分布式锁原理
    原理简介: zookeeper实现分布式锁的原理就是多个节点同时在一个指定的节点下面创建临时会话顺序节点,谁创建的节点序号最小,谁就获得了锁,并且其他节点就会监听序号比自己小的节点,...
    99+
    2024-04-02
  • Zookeeper的分布式锁的实现方式
    这篇文章主要讲解了“Zookeeper的分布式锁的实现方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper的分布式锁的实现方式”吧!1. 背景最近在学习 Zookeeper,...
    99+
    2023-06-05
  • ZooKeeper能否用于分布式锁的实现
    是的,ZooKeeper可以用于分布式锁的实现。ZooKeeper是一个分布式协调服务,可以用来实现分布式系统中的一些共享资源管理问...
    99+
    2024-03-07
    ZooKeeper
  • 基于Zookeeper实现分布式锁详解
    目录1、什么是Zookeeper?2、Zookeeper节点类型3、Zookeeper环境搭建4、Zookeeper基本使用5、Zookeeper应用场景6、Zookeeper分布式...
    99+
    2024-04-02
  • InterProcessMutex实现zookeeper分布式锁原理是什么
    这篇“InterProcessMutex实现zookeeper分布式锁原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-06-29
  • ZooKeeper中怎么处理分布式锁
    在ZooKeeper中处理分布式锁通常使用临时有序节点来实现。具体步骤如下: 在ZooKeeper的指定节点下创建一个顺序临时节点...
    99+
    2024-04-02
  • zookeeper实战之实现分布式锁的方法
    目录一、分布式锁的通用实现思路二、ZK实现分布式锁的思路三、ZK实现分布式锁的编码实现1、核心工具类实现2、测试代码编写线程安全问题复现使用上面封装的ZkLockHelper实现的分...
    99+
    2022-11-13
    zookeeper分布式锁 zookeeper实现分布式锁 zookeeper分布式锁原理
  • 怎么在SpringBoot中使用Redis实现分布式锁
    这篇文章主要介绍了怎么在SpringBoot中使用Redis实现分布式锁的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在SpringBoot中使用Redis实现分布式锁文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • Zookeeper怎么实现分布式事务
    Zookeeper本身并不直接支持分布式事务,但可以作为分布式事务的基础设施来帮助实现分布式事务。以下是一种可能的实现方式: 使...
    99+
    2023-10-27
    Zookeeper
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作