SpringCloud商城day14 订单处理-2021-10-26

一. 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;
       
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 主要功能服务限流降级:默认支持 WebServlet、 WebFlux, OpenFeign、 RestTemplate、 Spring CloudGateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值