- 需求
- 超时未支付的订单需要进行状态修改,改成已结束,并回滚库存数。
- 实现思路
- 使用延迟消息队列(死信队列)实现
- 在订单创建时发送一个延迟消息,内容为订单号,系统会在限定时间之后取出这个消息然后查询这个消息的支付状态,根据结果做出相应处理。
- 消息的TTL(Time To Live)
- 消息存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的情况下的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间就认为消息死了,成为死信。
- 业务逻辑
- 使用死信队列监听,超时后根据订单ID查询数据库中的订单信息,判断订单是否存在以及查看支付情况。
- 已支付
- 进行订单状态修改(三湘项目应该不需要)
- 未支付
- 关闭订单,修改状态为未支付但已结束,回滚库存
- 已支付
- 使用死信队列监听,超时后根据订单ID查询数据库中的订单信息,判断订单是否存在以及查看支付情况。
- 操作步骤
- 建立死信交换机orderTimeOutExchange
- 创建队列orderTimeOutQueue
- 绑定交换机与队列
- 创建队列orderCreateQueue,设置TTL,绑定死信交换机
订单超时处理
最新推荐文章于 2024-11-11 21:32:03 发布