定时任务如何做到互斥

yangrfa 发布于 2018/02/09 14:14
阅读 598
收藏 2

如题,比如定义了以下几个定时任务:

1. 每天早上8点执行动作A;

2. 节假日(五一、十一、中秋等)的早上8点不执行动作A,有可能执行动作B,也有可能什么都不执行;

3. 周末早上8点执行动作C。

优先级:节假日>周末>其他。

请问,这种情况下,这些任务如何做到互斥?希望大家指点思路,谢谢。

具体实现层面使用Spring或Quartz都行。

加载中
0
g
goodjin

任务统一管理起来,由一个中心服务来分发任务,中心服务来保证任务互斥就比较方便了。

比如利用数据库的锁,每种任务建立一条单独的记录,执行任务时给它加锁,标记为已经有节点在执行了,这样其他节点查询到该任务已经被其他节点执行时就不再继续执行了。

yangrfa
yangrfa
一个比较小的系统,没有做的那么复杂,不过谢谢了,扩展了思路。
f
freezingsky
Quartz的设计 就是这个原理。为了方便使用,可以使用xxl-job,连UI带配置都有,挺好用的。
0
会飞的小强

我这边有个思路:首先实现一个分布式锁(比如用redis或zookeeper实现),如果存在3个线程一起跑情况,看谁先取到锁,谁就执行。因为你需求要求“节假日>周末>其他”,所以你在设置定时任务时可以这样设置:

节假日线程:07:59:55执行    周末线程:08:00:00执行  其他线程:08:00:05执行

 

yangrfa
yangrfa
谢了,这种方式比较取巧!!
0
花花兽
花花兽

定时任务启动后判断时间,然后分发执行不同的逻辑不行么

0
狐狸糊涂
狐狸糊涂

既然你任务本身就是互斥的,而且调度时间都是早上8点,就定时每天8点开始任务,内部走不同分支不就可以了吗?

开始任务:(只允许进入其中一个分支)

 - 如果是节假日-> do task B or nothing
- 如果是周末 -> do task C
- 默认 -> do task A

返回顶部
顶部