一. RabbitMQ延时消息-> 订单处理
1. 流程: 调用微信支付api-> 查看订单状态-> 未支付则调用关闭订单api-> 修改订单状态为已关闭order-> 回滚库存goods-> 已支付则做补偿操作(修改订单状态和记录日志)
2. 核心: 死信队列-> provider发送的消息不会被立刻消费-> 设定TTL后被consumer消费
3. 创建订单时, 发送延迟消息为订单号-> 系统在限定时间内取出消息-> 查询订单支付转态
4. 死信交换机
(1) 普通队列: 队列: queue.ordertimeout (2) 死信交换机(Dead Letter Exchange): TTL到期: 队列长度满了; consumer拒收(requeue=false); name: exchange.ordertimeout type: fanout(类型必须为fanout) (3) 绑定: Bindings-> To queue-> queue.ordertimeout (4) 死信队列: Tell Time Live消息过期时间 name: queue.ordercreate durability: Durable Auto delete: No Arguments: x-message-ttl=10000 //消息的生存时间 x-dead-letter-exchange=exchange.ordertiemout //队列的死信交换机
5. 代码实现:
(1) 订单价单-> 发送延迟消息 (2) 消息内容: orderId (3) 发送到MQ的延迟消息 (4) 订单服务监听消息 (5) 基于微信api-> 查询支付状态 (6) 已支付-> 数据补偿-> MySQL记录日志/订单转态已支付 (7) 未支付-> 基于微信api关闭订单-> MySQL修改订单状态-> 商品库存回滚
调用微信api查询订单/关闭订单
(1) com.changgou.pay.controller //基于微信查询订单 @GetMapping("/query/{orderId}") public Result queryOrder(@PathVariable("orderId")String orderId) { Map map = wxPayService.queryOrder(orderId); return new Result(true, StatusCode.OK, "查询订单成功", map); } //基于微信关闭订单 @PutMapping("/close/{orderId}") public Result closeOrder(@PathVariable("orderId")String orderId){ Map map = wxPayService.closeOrder(orderId); return new Result(true, StatusCode.OK, "关闭订单成功", map); } (2) com.changgou.pay.service.impl //基于微信查询订单 @Override public Map queryOrder(String orderId) { try { Map<String, String> map = new HashMap(); map.put("out_trade_no", orderId); Map<String, String> resultMap = wxPay.orderQuery(map); return resultMap; } catch(Exception e) { e.printStackTrace(); return null; } } //基于微信关闭订单 @Override public Map closeOrder(String orderId) { try { Map<String, String> map = new HashMap(); map.put("out_trade_no",orderId); Map<String, String> resultMap = wxPay.closeOrder(map); return resultMap; } catch(Exception e) { e.printStackTrace(); return null;
SpringCloud商城day14 订单处理-2021-10-26
最新推荐文章于 2022-07-29 10:41:47 发布
本文详细介绍了使用Spring Cloud构建的商城系统中,如何利用RabbitMQ实现订单的延时处理。流程包括调用微信支付API、检查订单状态、关闭未支付订单以及回滚库存。核心是通过死信队列实现消息的延迟消费。同时,讨论了批量发货功能,涉及第三方物流系统的接口对接,如快递鸟和菜鸟物流。最后,阐述了自动收货功能,包括用户手动确认和通过Spring Task定时任务自动修改订单状态。
摘要由CSDN通过智能技术生成