订单支付超时,自动关闭订单实现

简介: 今天跟大家一起探讨一个场景:用户对商品下单,约定30分钟没支付,超时订单将被系统自动关闭。
微信公众号:冯文议(ID:fwy-world)

大家好!

今天跟大家一起探讨一个场景:用户对商品下单,约定30分钟没支付,超时订单将被系统自动关闭。

你会如何实现呢?

早期方案:扫表

定时任务,每分钟去查询数据库,查询超时没有支付的,就修改订单状态。

扫表实现

思路清晰,实现起来也比较简单,但是遇到的问题也比较多,比如:

  1. 每分钟都去查询数据库,数据库的压力比较大。
  2. 有一定的延迟。

方案升级:消息队列

用户下单成功,就发送到消息队列。时间到了,消费端拿到数据,就查询数据,判断订单状态,如果没有支付,就修改订单状态。

消息队列实现

目前落地的是采用 RabbitMQ 的延迟队列。用户创建订单成功,就加入到 MQ 的延迟队列,时间到了,就会自动消费,然后关单。

关于 RabbitMQ 延迟队列,可以看这篇文章:Spring Boot and RabbitMQ 初探 中关于【延迟队列】部分!


好了,今天的分享就到这里了。我是小冯,一名Java程序员,专注于程序设计和开发,如果你在开发上遇到问题,欢迎一起交流,微信公众号:冯文议(ID:fwy-world)。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
Java Spring 容器
如何解决spring EL注解@Value获取值为null的问题
本文探讨了在使用Spring框架时,如何避免`@Value("${xxx.xxx}")`注解导致值为null的问题。通过具体示例分析了几种常见错误场景,包括类未交给Spring管理、字段被`static`或`final`修饰以及通过`new`而非依赖注入创建对象等,提出了相应的解决方案,并强调了理解框架原理的重要性。
1194 5
|
消息中间件 NoSQL Kafka
订单超时取消的11种方式(非常详细清楚)
订单超时取消的11种方式(非常详细清楚)
9467 6
订单超时取消的11种方式(非常详细清楚)
|
算法 搜索推荐
快速排序-数据结构与算法
快速排序(Quick Sort)是一种基于分治法的高效排序算法。其核心思想是通过选择基准(pivot),将数组划分为左右两部分,使得左侧元素均小于基准,右侧元素均大于基准,然后递归地对左右两部分进行排序。时间复杂度平均为 O(n log n),最坏情况下为 O(n²)(如数组已有序)。空间复杂度为 O(1),属于原地排序,但稳定性不佳。 实现步骤包括编写 `partition` 核心逻辑、递归调用的 `quickSort` 和辅助函数 `swap`。优化方法有随机化基准和三数取中法,以减少最坏情况的发生。
763 13
|
索引 Python
%g是什么
`%g` 是 Python 字符串格式化中的一种格式说明符,用于表示浮点数或整数,能自动选择最合适的表示法。当数值为整数时,它显示整数;当数值较大或含小数时,它选择科学记数法或小数点记数法,并去掉无用的零。例如:
2278 1
|
消息中间件 SQL RocketMQ
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
924 1
|
SQL XML Java
Mybatis的原理和MybaitsPlus
这篇文章对比分析了Mybatis和Mybatis Plus的特点与底层实现机制,探讨了两者之间的差异及各自的优势。
639 0
|
消息中间件 NoSQL Java
使用RabbitMQ实现未支付订单在30分钟后自动过期
使用RabbitMQ实现未支付订单在30分钟后自动过期
使用RabbitMQ实现未支付订单在30分钟后自动过期
|
消息中间件 NoSQL 数据库
订单超时未支付自动取消--实现简述
订单超时未支付自动取消--实现简述
606 0