B2C电商项目(第十三天、超时未支付订单处理、订单批量发货、确认收货与自动收货)

订单处理

课程内容:
通过 rabbitmq的延迟消息完成超时订单处理
完成批量发货功能,了解第三方物流系统
完成自动收货功能

一、超时未支付订单处理

1.1 需求分析

超过限定时间并未支付的订单,我们需要进行超时订单的处理:先调用微信支付api,查询该订单的支
付状态。如果未支付调用关闭订单的api,并修改订单状态为已关闭,并回滚库存数。如果该订单已经
支付,则做补偿操作(修改订单状态和记录)。

1.2 实现思路

如何获取超过限定时间的订单?我们可以使用延迟消息队列(死信队列)来实现。
所谓延迟消息队列,就是消息的生产者发送的消息并不会立刻被消费,而是在设定的时间之后才可以消
费。
我们可以在订单创建时发送一个延迟消息,消息为订单号,系统会在限定时间之后取出这个消息,然后
查询订单的支付状态,根据结果做出相应的处理。

1.3 rabbitmq延迟消息

使用RabbitMQ来实现延迟消息必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过
这两者的组合来实现上述需求。

1.3.1 消息的TTL(Time To Live)

消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有
消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消
息就死了,称之为死信。
我们创建一个队列queue.temp,在Arguments 中添加x-message-ttl 为5000 (单位是毫秒),那每一
个进入这个队列的消息在5秒后会消失。

1.3.2

你可能感兴趣的:(电商系统)