分布式事务框架Fescar在SpringCloud环境下的应用实践

一、Fescar简介

Fescar是阿里巴巴开源的分布式事务中间件,以高效并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问题。
官方介绍:https://github.com/seata/seata/wiki/%E6%A6%82%E8%A7%88

二、设计思路

  • 通过API调用服务A,服务A中先对数据库A进行插入操作,然后通过feign调用服务B,在服务B中对数据库B进行插入操作,调用服务B完成后,此时数据库A和数据库B中都有新插入的记录,接着服务A中抛出异常,此时数据库A与数据库B中的数据都应该回滚,即最终都没有新插入的记录

三、开发环境

(一)软件版本

环境 版本 备注
操作系统 in PC Window 10 企业版 安装JDK、VMWare、Maven、Intellij IDEA
操作系统 in VMWare CentOS Linux release 7.6.1810 安装Docker
VMWare 15.0.0 build-10134415
Intellij IDEA IntelliJ IDEA 2018.3.2 (Ultimate Edition)
JDK in PC 1.8.0_171
JDK in VMWare 1.8.0_201
Maven 3.5.3
MySQL 8.0.15 VMware中Docker镜像安装
Docker in VMWare 18.09.4
(二)第三方库版本
名称 版本 备注
- - -
SpringBoot 1.5.15.RELEASE
SpringCloud Edgware.SR4
Lombok 1.16.20
Fescar 0.4.1
Druid 1.1.15
Mybatis-spring 1.2.2

四、准备工作

(一)MySQL
1.创建2个数据库:test_a和test_b
2.在test_a数据库中:
(1)创建表t_test_a:

-- ----------------------------
-- Table structure for t_test_a
-- ----------------------------
DROP TABLE IF EXISTS `t_test_a`;
CREATE TABLE `t_test_a`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

(2)创建表undo_log:

-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREATE TABLE `undo_log`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime(0) NULL,
  `log_modified` datetime(0) NULL,
  `ext` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_unionkey`(`xid`, `branch_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 192 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

3.在test_b数据库中:
(1)创建表t_test_b:

-- ----------------------------
-- Table structure for t_test_b
-- ----------------------------
DROP TABLE IF EXISTS `t_test_b`;
CREATE TABLE `t_test_b`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

(2)创建表undo_log:

-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS `undo_log`;
CREAT
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值