对于订单生成后未支付30分钟的情况,则会自动取消订单,请问您需要了解具体的实现方式吗?
发布时间
阅读量:
阅读量
明确用户需求
方案一:采用数据库轮询机制
方案二:利用 JDK 提供的延迟队列功能
方案三:引入时间轮算法进行处理
方案四:借助 redis 缓存实现相关功能
方案五:通过消息队列方式完成任务
了解需求
在系统开发过程中,常常会遇到与延时任务相关的功能需求。
例如:
- 当订单生成后 30 分钟内未完成支付,系统将自动取消该订单
- 订单生成后 60 秒,系统需向用户发送短信通知
对于这类任务,我们通常会使用一个专业术语来描述,即延时任务。那么随之而来的一个问题是,延时任务与定时任务之间究竟存在哪些差异?具体区别如下所示:
定时任务具有明确的触发时间点,而延时任务则不具备这一特征
定时任务通常具备周期性执行的特性,而延时任务则是在特定事件发生后,在一定时间间隔内执行,并不具有周期性
定时任务一般用于处理批量操作或多个并发的任务,而延时任务多用于处理单个独立的任务
接下来,我们将以判断订单是否超时为例,对相关解决方案进行详细分析
方案 1:数据库轮询
思路
此方法一般适用于规模较小的项目,其运作方式为:由单个线程定期对数据库进行扫描,依据订单生成的时间信息识别是否存在超时订单,并随后执行更新或删除等相应操作。
实现
可以采用 quartz 进行实现,以下作简要说明。
在 maven
全部评论 (0)
还没有任何评论哟~
