推广

SpringCloud+Seata1.4+Nacos1.4+MySQL8实现分布式事务(客户端)

iseeyu2年前 (2024-02-21)推广140

一个seata服务端,三个seata客户端

7. 模拟分布式事务

  • 订单服务先不开启全局事务,注释掉@GlobalTransactional
    /**
     * 创建订单->调用库存服务扣减库存->调用账户服务扣减账户余额->修改订单状态
     * 简单说:下订单->扣库存->减余额->改状态
     */
    @Override
    //@GlobalTransactional(name = "fsp-create-order",rollbackFor = Exception.class)
    public void create(Order order)
    {
        log.info("----->开始新建订单");
        //1 新建订单
        orderDao.create(order);

        //2 扣减库存
        log.info("----->订单微服务开始调用库存,做扣减Count");
        storageService.decrease(order.getProductId(),order.getCount());
        log.info("----->订单微服务开始调用库存,做扣减end");

        //3 扣减账户
        log.info("----->订单微服务开始调用账户,做扣减Money");
        accountService.decrease(order.getUserId(),order.getMoney());
        log.info("----->订单微服务开始调用账户,做扣减end");

        //4 修改订单状态,从零到1,1代表已经完成
        log.info("----->修改订单状态开始");
        orderDao.update(order.getUserId(),0);
        log.info("----->修改订单状态结束");

        log.info("----->下订单结束了,O(∩_∩)O哈哈~");

    }
  • 账户服务模拟超时异常
    /**
     * 扣减账户余额
     */
    @Override
    public void decrease(Long userId, BigDecimal money) {
        LOGGER.info("------->account-service中扣减账户余额开始");
        //模拟超时异常,全局事务回滚
        //暂停几秒钟线程
        try { TimeUnit.SECONDS.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }
        accountDao.decrease(userId,money);
        LOGGER.info("------->account-service中扣减账户余额结束");
    }
  • Postman测试
    由于账户服务超时,postman连接异常

    url参数的意思是1号用户购买了10个1号类型的产品,花了100元

order表

id user_id product_id count money status
1 1 1 10 100 0

account表 (由于feign的重试机制,可能第一次查看和第二次查看的结果会有所不同)

id user_id total used residue
1 1 1000 100 900

storage表

id product_id total used residue
1 1 100 10 90

8. Navicat手动还原数据,验证分布式事务

  • 订单服务开启全局事务注解@GlobalTransactional
    /**
     * 创建订单->调用库存服务扣减库存->调用账户服务扣减账户余额->修改订单状态
     * 简单说:下订单->扣库存->减余额->改状态
     */
    @Override
    @GlobalTransactional(name = "fsp-create-order",rollbackFor = Exception.class)
    public void create(Order order)
  • Postman测试
    还是由于账户服务超时,postman连接异常

    开启全局事务注解时postman调试

order表

id user_id product_id count money status
(N/A) (N/A) (N/A) (N/A) (N/A) (N/A)

account表

id user_id total used residue
1 1 1000 0 1000

storage表

id product_id total used residue
1 1 100 0 100

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57575.html

相关文章

至少价值上1000万的电梯广告投放25大实战技巧(纯干货)(电梯广告投放)

至少价值上1000万的电梯广告投放25大实战技巧(纯干货)(电梯广告投放)

社区媒体尤其是电梯广告作为都市生活接触最频繁的媒介之一,2020年疫情后受到越来越多品牌广告主甚至资本的青睐,成为广告营销、实现品牌突围破局业绩增长的最重要利器之一。那么,投放电梯广告究竟有何注意事项呢?如何才能让广告效果翻倍?“以和为贵”、“适可而止”。这才是最好的方式?还是广告就得啪一下打过来,...

最新App Store精品推荐的实例分析!

最新App Store精品推荐的实例分析!

自从WWDC14上苹果宣布支持Preview预览视频以来,已经将近过了2个年头。虽然在刚开始的时候大家热腾了一阵,但随后又趋于平静。如果你浏览App Store的榜单,会惊叹于提供Preview的App数量之少,如下图,免费榜前10中只有微信提供了,而且主要是配合其海外扩张的野心。...

小编分享网站设计哪些地方容易存在不合理的情况。

小编分享网站设计哪些地方容易存在不合理的情况。

在现代的发展激烈的社会,很多企业都通过网站建设在提高自身的竞争力。在互联网中的网站,据不完全统计应该在上亿个了,但是其中有些网站虽然是建设了,但是却没有竞争力。设计师在建设网站的时候都会遇到各种各样的问题,很多人觉得有些问题是不足以影响网站的,这些看法是一种误导。小问题的积累会对网站以后的优化很大影...

在自家产品上打广告,这才是推广的正确姿势!

在自家产品上打广告,这才是推广的正确姿势!

一提到到推广,大部分人就想到投放广告,就是砸钱投放报纸、电视、楼宇、影院、户外等类型的广告。那些“拥抱了互联网思维”的人呢,估计会想到SEM、视频贴片、微博微信软文、朋友圈广告等相对新潮的方式。 花钱的渠道这么多,自然就产生了一个选择的问题。 于是,这几年来,就有很多老板们一上来问我:...

淫欲…后患无穷,戒邪淫

淫欲…后患无穷,戒邪淫

贪念淫欲邪念带来的温暖恶心想吐的所谓“甜蜜愉快”的幻觉假象的感觉去对女性的身体和“美貌”起贪欲心、起奸邪占有的私心把女性的身体当做发泄淫欲的工具看恶心想吐的色情、手淫、意淫贪淫好色邪淫“侮辱、强奸”女性做邪恶的坏事,成为一个十恶不赦的邪恶的坏人,然后被身体中的内邪淫魔下尸和...

小编分享云裂变让你的网站安全无忧。

小编分享云裂变让你的网站安全无忧。

  木马病毒、sql注入漏洞、黑链接,这些都会严重影响的安全运行。但不要担心,专业的网站托管专家云裂变帮你解决烦恼,让你的网站安全。 云裂变能给客户提供最专业的网站托管服务,其中网站安全维护项目可以让你的网站远离危险。防止存在sql注入、上传等漏洞,进行对网站进行漏洞检测,保护网站...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片