如果定时任务部署在多台服务器上,quartz怎么保证那么定时任务不会执行两次,导致业务重复执行

news2024/12/22 22:25:35

Quartz 定时任务在多台服务器部署时,确保任务不会执行两次,避免业务重复执行的机制主要包括以下几点:

  1. 数据库锁机制:Quartz 的集群方案是基于单机版本加上一个公共数据库实现的。通过在数据库中配置定时器信息,并以数据库锁的方式确保同一个任务始终只有一个节点在运行。

  2. 集群架构:三个 Quartz 服务节点共享同一个数据库,如果某一个服务节点失效,那么 Job 会在其他节点上执行。各个 Quartz 服务器都遵守基于数据库锁的调度原则,只有获取了锁才能调度后台任务,从而保证了任务执行的唯一性。

  3. DisallowConcurrentExecution 注解:在单个任务类上使用 @DisallowConcurrentExecution 注解可以阻止并发执行多个相同定义的 JobDetail 实例。这意味着,即使有多个 JobDetail 实例,相同定义的 JobDetail 不会并发执行,从而避免了同一个任务被重复执行。

  4. 持久化支持:Quartz 支持持久化作业,即使在系统重启后也能恢复作业状态,确保任务的连续性和一致性。

  5. 集群检查间隔:在 Quartz 的配置中,clusterCheckinInterval 参数用于设置集群节点之间的检查间隔,这有助于维持集群状态的同步和一致性。

通过这些机制,Quartz 能够在多节点环境中有效地管理定时任务的执行,确保任务不会被重复执行,从而避免业务逻辑的重复执行。

Elastic-Job 通过其分布式调度协调特性确保在多节点环境下,定时任务不会被重复执行。以下是几个关键机制来保证这一点:

  1. 分布式调度协调:Elastic-Job 使用 Zookeeper 作为注册中心,进行统一调度,确保在分布式环境中,任务能够按指定的调度策略执行,并且能够避免同一任务多实例重复执行。

  2. 作业分片一致性:Elastic-Job 保证同一分片在分布式环境中仅一个执行实例,这是通过在 Zookeeper 中创建临时节点来实现的。当任务开始执行时,Elastic-Job 会在 Zookeeper 上创建对应的分片运行节点,任务结束后删除该节点。这样,即使有多个节点,同一分片也不会被重复处理。

  3. 失效转移(Failover):如果作业执行过程中服务器宕机,失效转移允许将该次未完成的任务在另一作业节点上补偿执行。Elastic-Job 不会在本次执行过程中进行重新分片,而是等待下次调度之前才开启重新分片流程。

  4. 幂等机制:开启 monitorExecution = true 能实现分布式作业幂等性,不会在多个作业服务器运行同一个分片。Elastic-Job 在开启幂等机制的情况下,会在分片任务开始时在注册中心 Zookeeper 上创建临时节点,在任务结束后会删除该目录。这样即使有多个节点,相同分片不会被重复处理。

  5. 弹性扩容缩容:Elastic-Job 支持弹性扩容缩容,将任务拆分为多个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,Elastic-Job 将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片。

通过上述机制,Elastic-Job 确保了即使在多节点环境下,每个任务分片在同一时间内也只会被一个节点执行,从而避免了业务重复执行的问题。

在Elastic-Job中,数据分片是一个重要的概念,它允许任务在分布式环境下运行,每个任务服务器只运行分配给该服务器的分片。对于您提到的将一万条数据分片成4个分片的情况,Elastic-Job本身并不直接处理数据,而是通过分片策略将分片项分配给各个运行中的作业服务器,开发者需要自行处理分片项与业务数据的对应关系。

具体来说,Elastic-Job中的分片项是指任务被拆分成的多个独立的任务项,每个分片项都有一个唯一的标识符,通常是从0开始的数字,直到分片总数减1。例如,如果设置4个分片,那么分片项标识符就是0、1、2、3。

在数据库操作的场景下,您需要根据分片项来编写查询逻辑,以便每个作业服务器只处理分配给它的数据。例如,如果数据存储在数据库中,并且您希望将数据平均分配给4个分片,您可以使用分片项作为查询条件的一部分。假设您有一张表,其中有一个ID字段,您可以编写如下SQL查询来获取每个分片应该处理的数据:

SELECT * FROM your_table WHERE ID % 4 = sharding_item_id;

其中sharding_item_id是当前分片项的标识符。这样,每个分片就会处理ID模4等于其分片项标识符的数据。例如,如果一个分片的标识符是0,那么它将处理所有ID为4的倍数的数据;如果标识符是1,它将处理所有ID除以4余1的数据,以此类推。

总结来说,Elastic-Job通过分片策略将任务分配给不同的作业服务器,而具体的数据分片逻辑需要开发者根据分片项来实现,以确保每个作业服务器只处理分配给它的数据。

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

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

相关文章

【HAL库】STM32CubeMX开发----STM32F407----Time定时器中断实验

STM32CubeMX 下载和安装 详细教程 【HAL库】STM32CubeMX开发----STM32F407----目录 前言 本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。 实现定时器TIM3中断,每1s进一次中断。 定时器计算公式如下: arr 是自动装载值&#x…

rabbitMq举例

新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服! 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…

基于 uniapp 开发 android 播放 webrtc 流

一、播放rtsp协议流 如果 webrtc 流以 rtsp 协议返回&#xff0c;流地址如&#xff1a;rtsp://127.0.0.1:5115/session.mpg&#xff0c;uniapp的 <video> 编译到android上直接就能播放&#xff0c;但通常会有2-3秒的延迟。 二、播放webrtc协议流 如果 webrtc 流以 webrt…

Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑

在人工智能领域&#xff0c;Meta的最新动作再次引起了全球的关注。今天&#xff0c;我们见证了Meta发布的Llama 3.3 70B模型&#xff0c;这是一个开源的人工智能模型&#xff0c;它不仅令人印象深刻&#xff0c;而且在性能上达到了一个新的高度。 一&#xff0c;技术突破&#…

游戏AI实现-寻路算法(DFS)

​深度优先搜索算法&#xff08;英语&#xff1a;Depth-First-Search&#xff0c;缩写为DFS&#xff09;是一种用于遍历或搜索树或图的算法。 寻路地图搭建&#xff1a; 游戏AI实现-寻路地图搭建-CSDN博客 算法过程&#xff1a;遍历方向为从竖直向上沿顺时针方向 1.首先将开…

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点&#xff1a;每个子区间内概率相等 &#xff0c; λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1&#xff1a;用EXCEL计算泊松分布的概率 3 比较λ不同值时…

八、测试-性能测试

文章目录 前言一、性能测试介绍1. 简介2. 流程3. 指标4. 测试方案5. 性能评估6. 常见性能问题及解决对策 二、测试工具1. Jmeter简介2. Jmeter常见测试框架 三、Jmeter录制脚本1. 基本2. 增强3. 脚本参数化4. 断言5. 关联6. JDBC请求 四、分布式测试五、性能测试报告 前言 性能…

Open-Source Test Automation Tools for Windows Desktop Apps 2022

Do you have a Windows desktop application that needs to be tested to verify if all the different features work seamlessly and according to documentation? We suggest you use test automation—or at least try it in combination with manual testing. Test auto…

【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;456:OpenGL、glfw、glut&#xff09;第二期3【小沐…

【论文笔记】Editing Models with Task Arithmetic

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Editing Models with Task…

c++ [eigen库配置和使用]

实验环境 eigen 3.40 下载链接 https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.zip Visual Studio 2022配置 解压eigen后&#xff0c;在项目中配置包含目录 代码示例 加头文件 #include <Eigen/Dense> using namespace Eigen;矩阵运算 MatrixXd …

SpringBoot完整技术汇总

SpringBoot 注意&#xff1a;SpringBoot技术示例中的项目均已上传至Gitee&#xff0c;均可通过此处自行下载 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程 Spring程序与SpringBoot程序对比如下 Spring程序配置…

windows 使用python共享网络给另外一个网卡

# -*- coding: utf-8 -*- import subprocessdef open_share(to_shared_adapter, from_shared_adapter):"""打开以太网的网络共享:return: None"""powershell_script f"""# Register the HNetCfg library (once)# regsvr32 hnetc…

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip

redis集群 服务器更换ip&#xff0c;怎么办&#xff0c;怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后&#xf…

Linux入门攻坚——42、Nginx及web站点架构模式

对于lvs集群&#xff0c;是一个四层路由的集群&#xff0c;Director无需启用对端口的监控&#xff0c;直接将报文转发给后端业务服务器RealServer。 使用Nginx也可以实现集群功能&#xff0c;Nginx实现反向代理&#xff0c;实现的是七层上的转发&#xff0c;要求Nginx本身就是…

Git merge 和 rebase的区别(附图)

在 Git 中&#xff0c;merge 和 rebase 是两种用于整合分支变化的方法。虽然它们都可以将一个分支的更改引入到另一个分支中&#xff0c;但它们的工作方式和结果是不同的。以下是对这两者的详细解释&#xff1a; Git Merge 功能&#xff1a;合并分支&#xff0c;将两个分支的…

密码编码学与网络安全(第五版)答案

通过如下代码分别统计一个字符的频率和三个字符的频率&#xff0c;"8"——"e"&#xff0c;“&#xff1b;48”——“the”&#xff0c;英文字母的相对使用频率&#xff0c;猜测频率比较高的依此为&#xff09;&#xff0c;t,*,5&#xff0c;分别对应s,o,n,…

我在广州学 Mysql 系列之 数据类型和运算符详解

ℹ️大家好&#xff0c;我是&#x1f606;练小杰&#xff0c;今天主要学习 Mysql的数据类型以及运算符操作~~ 上周五学习了“Mysql 系列之 数据“表”的基本操作”~ 想要了解更多&#x1f236;️MYSQL 数据库的命令行总结&#xff01;&#xff01;&#xff01; “我是你的敌人,…

SpringBoot中基于JWt的授权与续期方案

一、 SpringBoot中Token登录授权、续期和终止的方案RedisToken SpringBoot项目写登录注册之类的方案 使用Cookie或Session的话&#xff0c;它是有状态的&#xff0c;不符合分布式技术架构使用Security或者Shiro框架实现起来比较复杂&#xff0c;一般项目无需用那么复杂使用JW…

小程序快速实现大模型聊天机器人

需求分析&#xff1a; 基于大模型&#xff0c;打造一个聊天机器人&#xff1b;使用开放API快速搭建&#xff0c;例如&#xff1a;讯飞星火&#xff1b;先实现UI展示&#xff0c;在接入API。 最终实现效果如下&#xff1a; 一.聊天机器人UI部分 1. 创建微信小程序&#xff0c…