代码的完善
-
- 2.模型对象和 Mapper 对象生成
- 3.storage-service 代码的完善
-
- 3.1 接口设计
- 3.2 实现该接口
- 3.3 使用 Restful 暴露此接口
- 3.4 添加配置文件
- 3.5 添加启动类
- 3.6 启动项目测试
- 4.account-service 代码的完善
-
- 4.1 接口设计
- 4.2 实现该接口
- 4.3 使用 Restful 暴露此接口
- 4.4 添加配置文件
- 4.5 添加启动类
- 4.6 启动项目测试
- 5.order-service 代码的完善
-
- 5.1 接口设计
- 5.2 实现该接口
- 5.3 远程调用 account-service 的实现
- 5.4 Ribbon 集成
- 5.5 使用 Restful 暴露此接口
- 5.6 添加配置文件
- 5.7 添加启动类
- 5.8 启动项目测试
- 6.business-service 代码的完善
-
- 6.1 接口设计
- 6.2 实现该接口
- 6.3 远程调用 storage-service 的实现
- 6.4 远程调用 order-service 的实现
- 6.5 集成 Ribbon
- 6.6 添加配置文件
- 6.7 添加启动类
- 6.8 暴露下单接口
- 6.9 启动项目测试
- 7.总体的调用流程如下
- 8.正常下单测试
- 9.分布式事务的演示
-
- 9.1 在 accout-service 服务扣减余额触发异常
- 9.2 重启 accout-service
- 9.3 还原数据库里面的数据
- 9.4 重新下单测试
- 10.使用 Seata 解决分布式问题
-
- 10.1 改造 accout-service 里面的 AccountServiceImpl
- 10.2 改造 BusinessServiceImpl
- 10.3 重启测试
1.数据库表导入
- 在测试分布式事务之前,我们需要先设计数据库,以及准备测试数据。
- 新建数据库,命名为:seata
![*](https://cloud.cxykk.com/images/2024/1/25/2136/1706189804738.png)
- 创建表(导入 Sql)
/*
Navicat MySQL Data Transfer
Source Server : Mysql
Source Server Version : 80019
Source Host : localhost:3306
Source Database : seata
Target Server Type : MYSQL
Target Server Version : 80019
File Encoding : 65001
Date: 2020-05-21 16:22:26
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for account_tbl
-- ----------------------------
DROP TABLE IF EXISTS account_tbl;
CREATE TABLE account_tbl (
id int NOT NULL AUTO_INCREMENT,
user_id varchar(255) DEFAULT NULL,
money int DEFAULT '0',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of account_tbl
-- ----------------------------
INSERT INTO account_tbl VALUES ('1', 'DQCGM_USER_1', '10000');
INSERT INTO account_tbl VALUES ('2', 'DQCGM_USER_2', '10000');
-- ----------------------------
-- Table structure for order_tbl
-- ----------------------------
DROP TABLE IF EXISTS order_tbl;
CREATE TABLE order_tbl (
id int NOT NULL AUTO_INCREMENT,
user_id varchar(255) DEFAULT NULL,
commodity_code varchar(255) DEFAULT NULL,
count int DEFAULT '0',
money int DEFAULT '0',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of order_tbl
-- ----------------------------
-- ----------------------------
-- Table structure for storage_tbl
-- ----------------------------
DROP TABLE IF EXISTS storage_tbl;
CREATE TABLE storage_tbl (
id int NOT NULL AUTO_INCREMENT,
commodity_code varchar(255) DEFAULT NULL,
count int DEFAULT '0',
PRIMARY KEY (id),
UNIQUE KEY commodity_code (commodity_code)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of storage_tbl
-- ----------------------------
INSERT INTO storage_tbl VALUES ('1', 'HUAWEI_0001', '10');
INSERT INTO storage_tbl VALUES ('2', 'XIAOMI_002', '10');
-- ----------------------------
-- Table structure for undo_log
-- ----------------------------
DROP TABLE IF EXISTS undo_log;
CREATE TABLE undo_log (
id bigint NOT NULL AUTO_INCREMENT,
branch_id bigint NOT NULL,
xid varchar(100) NOT NULL,
context varchar(128) NOT NULL,
rollback_info longblob NOT NULL,
log_status int 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 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of undo_log
-- ----------------------