使用shedlock实现分布式互斥执行

前言

前序章节:springboot基础(82):分布式定时任务解决方案shedlock

如果你不清楚shedlock,建议先阅读前序章节,再来查看本文。

如果我们不在spring环境下,如何使用shedlock实现分布式互斥执行?

我们可以使用shedlock为我们提供的DefaultLockingTaskExecutor来实现手动调用。

在这里插入图片描述

示例

void executeWithLock(@NonNull Runnable var1, @NonNull LockConfiguration var2)

  @GetMapping("/testRunnable")public R testRunnable(HttpServletRequest request) {log.info("进入方法");String name = request.getParameter("name");LockingTaskExecutor executor = new DefaultLockingTaskExecutor(lockProvider);Instant now = Instant.now();try {executor.executeWithLock(new Runnable() {@Overridepublic void run() {log.info("执行");helloService.helloCn(name);}}, new LockConfiguration(now, "testRunnable", Duration.ofSeconds(30), Duration.ofSeconds(5)));log.info("end");return R.ok("success", null);} catch (Throwable throwable) {throwable.printStackTrace();}return R.fail("fail");}

LockingTaskExecutor.TaskResult executeWithLock(@NonNull LockingTaskExecutor.TaskWithResult task, @NonNull LockConfiguration lockConfig)
利用此API,我们可以让一个方法不能在一个时间只能有一次实例在执行,排斥调用者,且其它调用者的调用失败,这是与分布式锁不一样的地方。

 @GetMapping("/testTaskWithResult")public R testTaskWithResult(HttpServletRequest request) {log.info("进入方法");String name = request.getParameter("name");LockingTaskExecutor executor = new DefaultLockingTaskExecutor(lockProvider);Instant now = Instant.now();try {LockingTaskExecutor.TaskResult taskResult = executor.executeWithLock(new LockingTaskExecutor.TaskWithResult() {@Overridepublic Object call() throws Throwable {log.info("执行");return helloService.helloCn(name);}}, new LockConfiguration(now, "testTaskWithResult", Duration.ofSeconds(30), Duration.ofSeconds(5)));boolean flag = taskResult.wasExecuted();log.info("end");return R.ok("任务是否被执行:" + flag, taskResult.getResult());} catch (Throwable throwable) {throwable.printStackTrace();}return R.fail("fail");}

传送门

https://github.com/lukas-krecan/ShedLock

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

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

相关文章

深入理解CSS基础【代码审计实战指南】

文章目录 为什么需要cssCSS语法CSS的组成css注释: 快速入门示例:常用样式字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式文本居中 字体颜色和边框颜色介绍颜色示例:边框边框的宽度与高度 字体样式背景样式…

硬件开发笔记(二十七):AD21导入DC座子原理图库、封装库,然后单独下载其3D模型融合为3D封装

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140541464 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

韩顺平0基础学Java——第35天

p689-714 格式化语句 gpt说的: System.out.println 方法不支持像 printf 一样的格式化字符串。要使用格式化字符串,你可以使用 System.out.printf 方法或将格式化后的字符串传递给 System.out.println。下面是两种修正的方法: ### 方法一…

【Leetcode】十六、深度优先搜索 宽度优先搜索 :二叉树的层序遍历

文章目录 1、深度优先搜索算法2、宽度优先搜索算法3、leetcode102:二叉树的层序遍历4、leetcode107:二叉树的层序遍历II5、leetcode938:二叉搜索树的范围和 1、深度优先搜索算法 深度优先搜索,即DFS,从root节点开始&a…

git checkout

git checkout 创建分支 git checkout使用远程分支创建本地分支 git checkout -b 本地分支名 origin/远程分支名

Go语言之参数传递

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 修改参数 假设你定义了一个函数,并在函数里对参数进行…

【已解决】Linux(Centos7)中yum过程域名无法解析问题

问题原因 Linux中yum过程域名无法解析问题,但是ping 域名时联通的(即DNS没问题),所以初步判断是镜像源的问题。 解决方法(Centos7) 1、备份/etc/yum.repos.d/CentOS-Base.repo 2、下载CentOS-Base.repo…

【Linux】Linux的基本使用

一.Linux的背景知识. 1.1什么是Linux Linux是一种开源的类Unix操作系统内核. 和Windows是" 并列 "的关系. 1.2Linux的发行版本. Linux 严格意义来说只是一个 “操作系统内核”.一个完整的操作系统 操作系统内核 配套的应用程序. 由于 Linux 是一个完全开源免费…

W29--python01-字典与字符串互转,列表和元组可以互转

# json字符串处理为字典 json_s [{"status":401,"msg":"用户名密码错误","st":true}] print(json_s) # 处理成字典? import json json_dict json.loads(json_s) print(json_dict) # 字典转json字符串 json_dict …

wsdl接口返回xml数据接收

WSDL(Web Services Description Language)是一种用于描述 Web 服务的 XML 格式。WSDL 接口可以返回 XML 数据,这是因为 WSDL 中定义了接口的输入参数和输出结果的数据类型。 在 WSDL 中,可以定义操作(operation),每个操作都有一个输入消息(input message)和一个输出消…

FPGA:二选一选择器

1、需求 使用XILINX的XC7A35TFFG484-2开发板,完成二选一选择器的设计。 2、分析 二选一选择器如下所示: 观察可知有三个输入端,一个输出端,其逻辑原理为:当sel为高电平时,outa,当sel为低电平…

Python面试题:详细讲解Python的多线程与多进程编程问题

在 Python 中,多线程和多进程编程是并发编程的两种主要方式,用于提高程序的执行效率和响应性。虽然它们都可以实现并发执行,但它们的工作原理和适用场景有所不同。以下是对 Python 多线程和多进程编程的详细讲解,包括它们的工作原…

高级PER语言编程:优化和性能提升

高级PER语言编程:优化和性能提升 作为一名资深的PER语言技术工程师,我很高兴能为你提供关于高级PER语言编程的详细指南,特别是在优化和性能提升方面。本文将深入探讨各种优化技术和性能提升策略,并通过示例代码来展示如何在实际项…

十二、数组(2)

1.冒泡排序数组(升序) 冒泡排序:将一个整型数组排序(升序) 例: 10 9 8 7 6 5 4 3 2 1 9 10 8 7 6 …

Nginx系列-4 proxy_pass使用和路径拼接问题

1.proxy_pass使用 proxy_pass指令用于请求的转发,请客户端请求转发至第三方服务器;如下所示: location /query {proxy_pass http://www.baidu.com; }上述案例将以/query开头的url请求转发至http://www.baidu.com. proxy_pass用法较为简单,但…

第十四届蓝桥杯省赛C++C组C题【三国游戏】题解(AC)

解题思路 由于三种国家都有获胜的可能,所以我们需要分别枚举 X , Y , Z X,Y,Z X,Y,Z 获胜的情况。 设 X X X 获胜,那么对于第 i i i 个事件的贡献为 a [ i ] − ( b [ i ] c [ i ] ) a[i]-(b[i]c[i]) a[i]−(b[i]c[i]),根据贪心的策略…

【银河麒麟服务器操作系统】java进程oom现象分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 现象描述 某服务器系统升级内核至4.19.90-25.22.v2101版本后仍会触发oom导致java进程被kill。 现象分析 oom现象分析 系统messages日志分析,故…

人工智能前沿讲座——融合知识的自然语言处理

目录 引言 NLP的发展与现状 发展 机器翻译 机器翻译知识记忆(高频词汇记录) 现状 我们的尝试 融入外部知识库 融合语言先验知识 融合语篇知识 融合人类行为知识 引言 自然语言处理没有大家都认可的一个定义。 研究人与人交际中以及在人与计算…

配置文件格式 JSON 快速上手

文章目录 1.语法2.实例3.解析参考文献 JSON(JavaScript Object Notation) 是轻量级的文本数据交换格式,独立于语言,具有自我描述性。JSON 类似于 XML,但比 XML 更小、更快,更易解析。 1.语法 JSON 语法是 …

数据编织 Data Fabric:解决“数据孤岛”的新思路

一个不争的事实是,企业内部数据孤岛的形成,根因在于业务发展的复杂性与技术迭代的快速性导致。具体而言,随着企业业务快速增长,如新生产线的引入或外部公司的并购,这些活动往往伴随着新系统上线与独立数据体系的融入&a…