推广

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

iseeyu3年前 (2024-02-21)推广147

一个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

相关文章

产品运营背后的解构与重构:宝洁品牌王国为何被“肢解”?今日头条为何能平台化?

产品运营背后的解构与重构:宝洁品牌王国为何被“肢解”?今日头条为何能平台化?

一、Unbundle (解构) 我在《再说五个小风口及其逻辑,预测第六个小风口》这篇文章中曾经提到了一个点,当时就引起很多人的兴趣,那个点叫做:Unbundling the facilities(解构硬件基础设施)。比如“迷你KTV”就是硬件设施解体中的一种。 其实,在这个之前,我还分...

中国经济的下半场开始了,赚钱的逻辑完全变了

作者:水木然进入2022年,我们越来越能深刻地感受到一个事实:世界的不确定性越来越强了,时刻都在动荡;世界的联动性越来越强,牵一发而动全身,作为个体,任何一个风吹草动都有可能影响我们的命运。人群中的焦虑情绪也越来越浓重,大部分人却只能干着急,却无处下手。那么,未来的世界究竟...

小编教你企业选择全网推广时可以做的七大方法。

小编教你企业选择全网推广时可以做的七大方法。

要做全网推广,首先我们要懂得运用现有的所有有效推广方式,只有增加自己产品品牌曝光率,才能增加为自己来带流量,进而增加转化率。不要盲目的去选择一些推广方式,有时候选择不适合自己的推广模式的话,往往事与愿违。今天云裂变小编就整理一些全网推广的几个方式,希望对大家有所帮助。 一:在流量大的网站...

要注意锚文本优化过度的问题。

要注意锚文本优化过度的问题。

  锚文本优化(什么是锚文本链接),这是seo必备的一个优化技巧,包括了给自己的页面做内链和在别人的页面上做外链,但是有的人往往不注意,过度的使用这个方法,以至于给网站带来不好的影响,下面就来谈一谈锚文本优化过度的问题:    1、锚文本链接的内容要与你所做链接的页面内容相关&nb...

SEO整站优化是什么。

SEO整站优化是什么。

SEO整站优化是什么?做为名SEO优化的从业人员,要考虑到的并不是单个关键字排名或是百度收录,要考虑到的是网站的整站优化,并非以某一关键字为最终目地,只是对一个网站开展综合性的优化,包含了域名选择、网站构造或频道设定、内部及外链,内容基本建设。来访者感受等好几个层面开展的优化,关键字的排行仅仅层面,...

分享如何提高政府网站建设的满意度。

分享如何提高政府网站建设的满意度。

据悉,到目前为止,中国政府网站已经超过5万个。这些网站在传递政府信息、服务社会事业方面发挥着不可替代的作用。然而,公众对政府网站的一直处于较低水平,政府网站因信息陈旧、缺乏互动、服务差而受到批评。作为政府与民众沟通的主要平台,政府网站在哪里? 政府网站应该是公众了解公共信息、表达利益、反映人民感情...

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

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