首页 > 其他分享 >使用Seata XA模式的全局事务管理在SpringCloud电商订单系统中的应用

使用Seata XA模式的全局事务管理在SpringCloud电商订单系统中的应用

时间:2024-07-30 15:55:25浏览次数:10  
标签:事务管理 Seata 商品 items XA 购物车 订单 电商 order

在开发电商系统的过程中,订单创建是一项非常关键的功能。本文将介绍如何在订单创建过程中,结合Spring Cloud和Seata的XA模式来实现全局事务管理,以确保数据的一致性和完整性。

订单创建过程详解

在这段代码中,我们通过@GlobalTransactional注解来声明一个全局事务。以下是具体的实现步骤:

@Override
@GlobalTransactional
public Long createOrder(OrderFormDTO orderFormDTO) {
    // 1.订单数据
    Order order = new Order();
    // 1.1.查询商品
    List<OrderDetailDTO> detailDTOS = orderFormDTO.getDetails();
    // 1.2.获取商品id和数量的Map
    Map<Long, Integer> itemNumMap = detailDTOS.stream()
                                              .collect(Collectors.toMap(OrderDetailDTO::getItemId,
                                                                        OrderDetailDTO::getNum));
    Set<Long> itemIds = itemNumMap.keySet();
    // 1.3.查询商品
    List<ItemDTO> items = itemClient.queryItemByIds(itemIds);
    if (items == null || items.size() < itemIds.size()) {
        throw new BadRequestException("商品不存在");
    }
    // 1.4.基于商品价格、购买数量计算商品总价:totalFee
    int total = 0;
    for (ItemDTO item : items) {
        total += item.getPrice() * itemNumMap.get(item.getId());
    }
    order.setTotalFee(total);
    // 1.5.其它属性
    order.setPaymentType(orderFormDTO.getPaymentType());
    order.setUserId(UserContext.getUser());
    order.setStatus(1);
    // 1.6.将Order写入数据库order表中
    save(order);

    // 2.保存订单详情
    List<OrderDetail> details = buildDetails(order.getId(), items, itemNumMap);
    detailService.saveBatch(details);

    // 3.扣减库存
    try {
        itemClient.deductStock(detailDTOS);
    } catch (Exception e) {
        throw new RuntimeException("库存不足!");
    }

    // 4.清理购物车商品
    cartClient.deleteCartItemByIds(itemIds);
    return order.getId();
}
关键步骤解析
  1. 订单数据初始化

    • 创建订单对象并设置订单的基础信息。
  2. 查询商品

    • 从订单表单中获取商品详情,并根据商品ID查询商品信息。
    • 如果查询不到所有商品,则抛出异常。
  3. 计算总价

    • 根据商品的价格和购买数量计算订单的总金额。
  4. 写入数据库

    • 将订单信息保存到数据库的订单表中。
  5. 保存订单详情

    • 构建订单详情列表并批量保存到订单详情表中。
  6. 扣减库存

    • 调用商品服务扣减库存,如果库存不足,则抛出异常。
  7. 清理购物车

    • 删除购物车中已下单的商品。
XA模式的优势

XA模式是一种分布式事务协议,用于确保多个资源管理器之间的数据一致性。使用Seata的XA模式,可以在分布式系统中实现强一致性的事务处理,尤其适用于需要跨多个数据库或服务的复杂场景。在本例中,使用XA模式可以确保订单创建、库存扣减和购物车清理这些操作在一个全局事务中完成,避免因部分操作失败而导致的数据不一致问题。

通过Spring Cloud与Seata XA模式的结合,我们能够在分布式架构下高效地管理全局事务,提升系统的可靠性和数据一致性,为用户提供更好的购物体验。

标签:事务管理,Seata,商品,items,XA,购物车,订单,电商,order
From: https://blog.csdn.net/Takumilove/article/details/140799160

相关文章

  • 如何快速了解亚马逊跨境电商基础知识?
    新手应该了解哪些亚马逊相关基础知识店铺相关:关于注册店铺主要分为招商经理链接注册和个人自注册的形式。1.自注册通过亚马逊各个国家官网右下方点击“SellonAmazon”选择·“Startselling”,按照要求填写好所需要的资料进行注册,就是通过亚马逊境外渠道进行注册,不经过中......
  • DataFunTalk | AI Agent 在 1688 电商平台中的应用
    本文来源公众号“DataFunTalk”,仅用于学术分享,侵权删,干货满满。原文链接:AIAgent在1688电商平台中的应用导读 本文将分享AIAgent在电商平台中的探索。本文整理自2024年4月19日DataFunCon2024(上海站)(线下)王卓隽老师关于《AIAgent在1688电商平台中的应用》的......
  • 【[代码详细教程+文档+PPT+源码等]SSM框架美妆商城全套|电商购物[包运行成功+永久免费
    一、项目介绍《基于SSM美妆商城项目前后台全套》该项目含有源码、文档、答辩ppt、开题报告、代码详细讲解教程等资料、配套开发软件、软件安装教程、项目发布教程等前端使用技术:JSP,bootstrap、jQuery等后端使用技术:Springmvc、Spring、Mybatis等数据库:Mysql数据库二、......
  • 【一手源码展示】Java代码TikTok内嵌商城代码程序,TikTok跨境电商系统源码,TK商城源码
    这套程序已经做了很久了我这边修复二开优化也好几个版本搭建起来做起来确实费劲前后端分离的程序 二开效果页面展示:......
  • 跨境电商产品配送完整指南:难题的解决方案
    在全球化浪潮的推动下,跨境电商已成为企业拓展海外市场的重要途径。然而,这一领域并非没有挑战。本文将深入探讨跨境电商在产品配送过程中可能遇到的问题,并提供解决方案,帮助您顺利航行在跨境电商的新航道上。跨境电商配送的常见问题跨境电商的配送过程充满了不确定性,以下是一些......
  • 跨境电商产品配送完整指南:难题的解决方案
    在全球化浪潮的推动下,跨境电商已成为企业拓展海外市场的重要途径。然而,这一领域并非没有挑战。本文将深入探讨跨境电商在产品配送过程中可能遇到的问题,并提供解决方案,帮助您顺利航行在跨境电商的新航道上。跨境电商配送的常见问题跨境电商的配送过程充满了不确定性,以下是一些常......
  • IT实战课堂计算机毕业设计毕设项目精品PHP实现的网络电商平台设计与实现
    项目功能简介:《[含文档+PPT+源码等]精品PHP实现的网络电商平台设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:操作......
  • 跨境电商平台:引领国际贸易新潮流
    随着全球化的不断推进,跨境电商逐渐成为国际贸易的重要组成部分。它不仅为消费者带来了更多样化的商品选择,也为商家提供了更广阔的市场空间。本文将详细介绍跨境电商平台的相关知识,帮助读者更好地理解这一新兴领域的运作机制和市场前景。跨境电商平台概述跨境电商平台是指通过互......
  • Python爬虫:代理ip电商数据实战
    引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训......
  • 主流平台电商售后API接口详解
    售后订单是电商卖家常需要处理的业务,售后率高的话会特别耗费精力,接入电商售后API接口可高效支持全流程的售后处理操作,商家无需登录店铺后台,售后管理更为便捷。但并不是所有电商平台都全面开放了电商售后API接口,这里总结了一些主流平台电商售后API接口,看看有没有你需要的。一、......