定时任务之基础实现方式(分布式任务调度)

在我们的项目中,经常会用到定时任务,尤其是大公司,使用到任务调度的可能性几乎是百分之百,举几个例子:
1、我是美团,每天定时上午10点发限量优惠券,要怎么定时实现呢?
2、签约免密支付(拼多多、淘宝、美团外卖),签约之后,刷新结果,(假设)每5秒刷新一次,刷新所有状态为“签约中”的签约订单
3、分布式集群机器,每天晚上12点同步数据,又或者每隔一个小时拉取一次数据。
这样的例子比比皆是,我们在开发中必然会使用到定时任务,我们这一篇先讲讲那些传统的、基础的、单机的定时任务实现方式

一、使用线程的sleep()方法来实现定时任务

java中,Thread线程可以实现睡眠N秒,然后执行,我们就可以利用这一点,设置一个while(true)的死循环,每多少时间执行一次,一天,一小时,一分钟,5秒钟执行一次
在这里插入图片描述

二、使用TimerTask定时器来实现定时任务

java中有一个定时器的类,主要为任务的具体内容
在这里插入图片描述

三、线程池

在线程池中也有
在这里插入图片描述

四、Quartz

Quartz框架详解第一篇
详细介绍
分布式定时任务调度框架【Quartz】学习与实战记录完整篇
使用Cron生成器,生成规则
在线Cron表达式生成器
Quartz框架可以实现 异步定时任务
quartz是⼀个功能丰富的开源的任务调⽤系统,它可以创建简单或者复杂的⼏⼗、⼏百、甚⾄成千上万的job。

很多分布式任务调度都会使用到Quartz,但是一般不会单独使用,了解即可

总结

这些单机任务调度有很多不足之处
在单机环境下,上面的这种定时任务实现方式问题主要有一个,无法进行管理,没有容错机制。但是在集群环境下,如果不对代码作控制,就会导致集群的每一台机器都会执行一次定时任务。
常见的解决方式,我通过配置文件进行控制,只让定时任务在某一台机器上执行,如果项目比较小,就几台机器组成的集群环境,这样的方式确实可以,只不过在任务的管理上需要想办法解决。
如果是一个很庞大的分布式微服务系统,可能会有成千上万个定时任务,那上面的方法就不合理了。因此许多互联网公司会采用分布式任务调度系统,主要为了实现高可用、容错管理、负载均衡、管理机制等功能,我目前所在公司使用的是xxl-job作为分布式任务调度平台。

下一篇介绍xxl-job这个使用最广泛的分布式任务调度平台

猜你喜欢

转载自blog.csdn.net/dayuiicghaid/article/details/126474648