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

1. 问题描述?

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 11

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

1年前 评论
╰ゝSakura

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

1年前 评论

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

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

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

1年前 评论

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

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

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

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

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

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

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

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