资讯专栏INFORMATION COLUMN

springboot集成分布式事务Seata

focusj / 3023人阅读

摘要:简介地址版本和版本为,一直在快速迭代在之前都有可能出现协议不兼容尽量使用版本号一致说明目前提供的示例是针对使用的服务,那的项目如何集成呢快速开始使用案例购买商品的业务逻辑。

简介 github地址

spring-boot-starter-seata:https://github.com/itrickzhan...

seata版本

server和client版本为0.4.1,Seata 一直在快速迭代在1.0 之前都有可能出现协议不兼容 尽量使用版本号一致

说明

目前提供的示例是针对使用dubbo的服务,那Spring Boot的项目如何集成fescar呢?

快速开始 使用案例

Business Service购买商品的业务逻辑。整个业务逻辑由3个微服务驱动:

Storage service: 扣除给定商品的库存量.

Order service: 根据采购需求创建订单.

Account service: 借记用户帐户上的余额.

请求逻辑

fescar下载

下载地址:https://github.com/alibaba/fe...

脚本 业务脚本
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) DEFAULT NULL,
  `commodity_code` varchar(255) DEFAULT NULL,
  `count` int(11) DEFAULT 0,
  `money` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) DEFAULT NULL,
  `money` int(11) DEFAULT 0,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
事务脚本
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
集成

    org.springframework.boot
    spring-boot-starter-seata
    ${project.version}
使用

使用注解@GlobalTransactional

    @GlobalTransactional(timeoutMills = 300000, name = "spring-cloud-demo-tx")
    @RequestMapping(value = "/fescar/feign", method = RequestMethod.GET, produces = "application/json")
    public String feign() {
        LOGGER.info("business Service Begin ... xid: " + RootContext.getXID());
        String result = storageService.storage(COMMODITY_CODE, ORDER_COUNT);
        if (!SUCCESS.equals(result)) {
            throw new RuntimeException();
        }
        result = orderService.order(USER_ID, COMMODITY_CODE, ORDER_COUNT);
        if (!SUCCESS.equals(result)) {
            throw new RuntimeException();
        }
        return SUCCESS;
    }
demo运行

spring-boot-starter-seata-sample

Start AccountService

Start StorageService

Start OrderService

Run BusinessService for demo test

运行结果

启动demo

访问demo

数据库数据

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75497.html

相关文章

  • 微服务架构中,二次浅封装实践

    摘要:三实践案例案例简介分布式系统中,微服务基础组件等,系统中间件,等,对常用功能配置等,进行二次浅封装并统一集成管理,以满足日常开发中基础环境搭建与临时工具的快速实现。 一、背景简介 分布式系统中存在很多拆分的服务,在不断迭代升级的过程中,会出现如下常见的棘手情况: 某个技术组件版本升级,依赖包升级导致部分语法或者API过期,或者组件修复紧急的问题,从而会导致分布式系统下各个服...

    Hujiawei 评论0 收藏0
  • Java学习路线

    摘要:学习路线编程基础语言语言基础数据类型面向对象接口容器异常泛型反射注解流集合类加载机制字节码执行机制 Java学习路线 Java编程基础 Java语言 Java语言基...

    不知名网友 评论0 收藏0
  • 布式事务中间件Seata的设计原理

    摘要:如上图所示,的实际上是已中间件的形式放在应用层,不用依赖数据库对协议的支持,完全剥离了分布式事务方案对数据库在协议支持上的要求。 微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,...

    Kylin_Mountain 评论0 收藏0
  • Spring Cloud Alibaba 新版本发布:众多期待内容整合打包加入!

    摘要:在之后,也终于发布了最新的版本。该版本距离上一次发布,过去了整整个月下面就随我一起看看,这个大家期待已久的版本都有哪些内容值得我们关注。如果是用户,同时也是阿里云这些产品的用户,那么直接使用还是非常方便的。 在Nacos 1.0.0 Release之后,Spring Cloud Alibaba也终于发布了最新的版本。该版本距离上一次发布,过去了整整4个月!下面就随我一起看看,这个大家期...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<