问答 / 1 / 11 / 创建于 1年前 / 更新于 1年前
任务开始后,根据用户添加的结束时间,到点自动结束,这个时间最少是4小时后,最大24小时,结束的时间还可以修改延后,这种情况,是延时任务好点,还是整个定时任务每分钟去检查订单表,到时间的处理下.本来用的延时任务,但没找到修改延时时间的文档,大佬们给个建议
补充 说明:订单结束的 延时任务主要是做关联硬件的处理,一个订单两个延时任务,一个是提前20分钟音箱通报快结束了,一个是 订单到期 自动断电
看你数据量要求了,如果数据量不是特别大,可以不是每分钟跑啊,间隔时间长点跑定时任务也是可以的
定时任务跑就可以了,延迟队列的话,数据量多,占redis空间,而且还有其他毛病
但是我这种需求,从来没改过数据表,也不知道为啥非得改数据表,用状态+时间组合判断的。
个人感觉,定时任务比延迟任务好点(靠谱),用延迟任务总会有意向不到的问题
本来用的延时任务,但没找到修改延时时间的文档
如果你想用延时任务,那其实不用 “修改” 去修改延时队列任务的时间,你可以换一种思路。
在加一个任务表,把关联的 ID 放进去,加上预期执行时间和执行状态(未执行、执行中、已执行、已取消)。
当修改时间时,直接再投递一条新的任务到队列进去(并且修改任务表中的预期执行时间)。
这时候延时队列里面就有 2 条任务了,当运行到其中一个任务时检查任务是否未执行,再检查时间,如果时间在允许范围内,先标记为执行中,再执行这个任务,最后标记为已完成。
一般情况下,不会有啥问题,但也不排除特殊情况。
我要举报该,理由是:
看你数据量要求了,如果数据量不是特别大,可以不是每分钟跑啊,间隔时间长点跑定时任务也是可以的
定时任务跑就可以了,延迟队列的话,数据量多,占redis空间,而且还有其他毛病
但是我这种需求,从来没改过数据表,也不知道为啥非得改数据表,用状态+时间组合判断的。
个人感觉,定时任务比延迟任务好点(靠谱),用延迟任务总会有意向不到的问题
如果你想用延时任务,那其实不用 “修改” 去修改延时队列任务的时间,你可以换一种思路。
在加一个任务表,把关联的 ID 放进去,加上预期执行时间和执行状态(未执行、执行中、已执行、已取消)。
当修改时间时,直接再投递一条新的任务到队列进去(并且修改任务表中的预期执行时间)。
这时候延时队列里面就有 2 条任务了,当运行到其中一个任务时检查任务是否未执行,再检查时间,如果时间在允许范围内,先标记为执行中,再执行这个任务,最后标记为已完成。
一般情况下,不会有啥问题,但也不排除特殊情况。