使用消息队列(MQ)实现“订单 30 分钟未支付自动关闭”的核心技术是延迟消息(Delayed Message)。 下面我将从整体业务流程、不同 MQ 的具体实现方案以及生产环境的核心注意事项三个方面为你详细解答。 --- 一、 整体业务流程 无论使用哪种 MQ,整体的业务架构流转都是相似的: 1. 创建订单:用户下单,数据库生成订单记录,状态为“待支付”。 2. 发送延迟消息:订单系统向 MQ 发送一条包含 的延迟消息,设置延迟时间为 30 分钟。 3. 消息滞留:消息在 MQ 中“等待” 30 分钟。 4. 消费消息:30 分钟后,MQ 将该消息投递给消费者(订单超时处理服务)。 5. 校验状态:消费者拿到 后,查询数据库或支付网关,检查该订单的最新状态。 6. 执行动作: 如果订单状态仍为“待支付”:将订单状态更新为“已关闭”,并执行库存回滚、优惠券退回等操作。 如果订单状态已变为“已支付”:说明用户已付款,直接丢弃该消息(不做任何处理)。 --- 二、 主流 MQ 的具体实现方案 不同的消息队列对延迟消息的实现方式不同,以下是常用的三种方案: 1. RabbitMQ 方案...