Advertisement

对于订单生成后未支付30分钟的情况,则会自动取消订单,请问您需要了解具体的实现方式吗?

阅读量:

明确用户需求

方案一:采用数据库轮询机制

方案二:利用 JDK 提供的延迟队列功能

方案三:引入时间轮算法进行处理

方案四:借助 redis 缓存实现相关功能

方案五:通过消息队列方式完成任务

了解需求

在系统开发过程中,常常会遇到与延时任务相关的功能需求。

例如:

  • 当订单生成后 30 分钟内未完成支付,系统将自动取消该订单
  • 订单生成后 60 秒,系统需向用户发送短信通知

对于这类任务,我们通常会使用一个专业术语来描述,即延时任务。那么随之而来的一个问题是,延时任务与定时任务之间究竟存在哪些差异?具体区别如下所示:

定时任务具有明确的触发时间点,而延时任务则不具备这一特征

定时任务通常具备周期性执行的特性,而延时任务则是在特定事件发生后,在一定时间间隔内执行,并不具有周期性

定时任务一般用于处理批量操作或多个并发的任务,而延时任务多用于处理单个独立的任务

接下来,我们将以判断订单是否超时为例,对相关解决方案进行详细分析

方案 1:数据库轮询

思路

此方法一般适用于规模较小的项目,其运作方式为:由单个线程定期对数据库进行扫描,依据订单生成的时间信息识别是否存在超时订单,并随后执行更新或删除等相应操作。

实现

可以采用 quartz 进行实现,以下作简要说明。

在 maven

全部评论 (0)

还没有任何评论哟~