Version: Next

业务说明

创建三个微服务

  • 订单服务
  • 库存服务
  • 账户服务

业务逻辑

  • 当用户下单时,会在 订单服务创建一个订单
  • 然后通过远程调用 库存服务扣减下单商品库存
  • 通过远程调用 账户服务扣减用户账户里的余额
  • 订单服务 修改订单状态为已完成

分析

  • 该操作横跨三个数据库,涉及两次远程调用,存在分布式事务问题

案例数据库

三个数据库

  • seata_order:存储订单数据库
  • seata_storage:存储库存的数据库
  • seata_account:存储账户信息的数据库
CREATE DATABASE seata_order;
CREATE DATABASE seata_storage;
CREATE DATABASE seata_account;

创建对应业务表

  • seata_order 下建 t_order
  • seata_storage 下建 t_storage
  • seata_account 下建 t_account
USE seata_order;
CREATE TABLE t_order(
id BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
user_id BIGINT(11) DEFAULT NULL COMMENT '用户id',
product_id BIGINT(11) DEFAULT NULL COMMENT '产品id',
count INT(11) DEFAULT NULL COMMENT '数量',
money DECIMAL(11,0) DEFAULT NULL COMMENT '金额',
status INT(1) DEFAULT NULL COMMENT '订单状态:0创建中,1已完结'
)ENGINE=InnoDB AUTO_INCREMENT=7 CHARSET=utf8;

创建对应回滚日志表

  • 订单、库存、账户 3 个库下都需要建各自的回滚日志表
  • /conf/db_undo_log.sql 为回滚日志表数据库脚本
  • 订单库存账户 的数据库里都各自建一个回滚日志表
    • 据说 1.0.0 版本之后不需要自己建了