Quartz定时任务集群,怎么解决任务重复执行问题

本文探讨了在Quartz定时任务集群中如何解决任务重复执行的问题。提出了数据量评估以决定是否需要分布式任务,以及仅解决并发问题的方案,如使用分布式锁或配置开关。此外,还介绍了真正的分布式任务方案,包括Elastic Job和自研分布式任务平台。最后,通过利用Redis分布式锁提供了一个实际的解决方案,确保在集群环境中定时任务只在一台机器上执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 数据量评估
定时任务一般的使用场景是定时查询出一批数据,对这一批数据进行业务操作。

根据数据量的大小决定是否使用分布式任务,如果数据量不大或者实时性要求不高,单机任务就够了,也可以减少相应复杂度。

如果数据量大就需要部署分布式任务。分布式集群中的节点对数据进行分片处理,即每个节点拿一部分数据进行业务处理。

2 仅解决并发问题方案
(1) Quartz + 分布式锁

假设定时任务部署了3台机器,在任务启动时3台机器竞争分布式锁,谁竞争到谁就执行,剩下2台不执行。分布式锁可以使用Redis或者Zookeeper

(2) 开关方案

方案一:配置文件中设置开关是否开启,执行任务前读取该开关,开启则执行。这种方式实现比较简单,但是如果需要换另外一台机器执行,必须修改配置项并发布项目,维护成本较高

方案二:建一个数据库配置表,配置表中配置可执行任务的机器标识,每台机器执行前读取这个配置,看看是否是本机。如果是则执行,否则不执行

方案三:Zookeeper做一个全局配置,配置项内容是可执行任务的机器标识,执行原理同方案一

3 真正分布式任务方案
(1) Quartz官方分布式方案

我认为这种方式比较重,需要根据官方文档新建数据表,个人并不推荐

(2) Elastic Job

当当网开源的一个分布式调度解决方案,在业界比较通用

(3) 自研分布式任务平台

有一定技术实力的公司,可以选择自研分布式任务平台
————————————————
利用redis分布式锁解决集群下定时任务重复执行

最近在给服务器搭建集群ng

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值