github项目地址:delay-task-schedule

大家还有什么好的方法或需要改进的地方欢迎大家评论

实现原理

1)延迟任务主要就是要保证任务的有序性,这一点mq不太容易实现,mq主要就是保证可以按照添加的顺序来执行,要想实现按照时间来排序有点困难,而这个恰巧可以通过redis的zset来实现,我们可以将执行时间作为score来添加zset数据,这样先执行的数据就会排在最前面,只需要取最前面的数据判断score值是否小于等于当前时间就可以确定要不要执行回调方法了

2)key-value设置,我们添加了延迟任务该怎么确定调用那个回调方法呢?这里我们可以用一个通用前缀拼接上回调方法名来做key,value可以使用回调参数转换的字符串作为value,然后根据方法名和参数可以找到对应的回调方法并调用

3)具体集成步骤

(由于jar包没有上传到maven仓库所以需要自己将jar部署到本地仓库)

1、下载项目的release代码自己打jar包

2、使用maven命令将jar部署到本地仓库,命令如下:mvn install:install-file -Dfile="jar包所在绝对路径" -Dpackaging=jar -DgroupId="com.yush" -DartifactId="delay-task-schedule" -Dversion="1.0.0"

3、在自己项目pom文件中引入

image

4、编写回调方法,注意方法需加回调注解并标明方法名,如下:

image

其中callbackHandle即是回调方法名,也是在我们提交延迟任务时需传入的方法名参数值

5、提交和终止延迟任务,如下:

首先注入DelayTaskService

然后通过DelayTaskService来提交任务

image