使用定时任务还是延时任务

1. 问题描述?

任务开始后,根据用户添加的结束时间,到点自动结束,这个时间最少是4小时后,最大24小时,结束的时间还可以修改延后,这种情况,是延时任务好点,还是整个定时任务每分钟去检查订单表,到时间的处理下.本来用的延时任务,但没找到修改延时时间的文档,大佬们给个建议

补充 说明:订单结束的 延时任务主要是做关联硬件的处理,一个订单两个延时任务,一个是提前20分钟音箱通报快结束了,一个是 订单到期 自动断电

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

看你数据量要求了,如果数据量不是特别大,可以不是每分钟跑啊,间隔时间长点跑定时任务也是可以的

2年前 评论
╰ゝSakura

定时任务跑就可以了,延迟队列的话,数据量多,占redis空间,而且还有其他毛病

2年前 评论

但是我这种需求,从来没改过数据表,也不知道为啥非得改数据表,用状态+时间组合判断的。

2年前 评论
Adachi (作者) 2年前
ononl 2年前
lyl (楼主) 2年前
Adachi (作者) 2年前
Adachi (作者) 2年前
Complicated

个人感觉,定时任务比延迟任务好点(靠谱),用延迟任务总会有意向不到的问题

2年前 评论

本来用的延时任务,但没找到修改延时时间的文档

如果你想用延时任务,那其实不用 “修改” 去修改延时队列任务的时间,你可以换一种思路。

在加一个任务表,把关联的 ID 放进去,加上预期执行时间和执行状态(未执行、执行中、已执行、已取消)。

当修改时间时,直接再投递一条新的任务到队列进去(并且修改任务表中的预期执行时间)。

这时候延时队列里面就有 2 条任务了,当运行到其中一个任务时检查任务是否未执行,再检查时间,如果时间在允许范围内,先标记为执行中,再执行这个任务,最后标记为已完成。

一般情况下,不会有啥问题,但也不排除特殊情况。

2年前 评论
lyl (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!