SpringCloud Alibaba:Seata分布式事务管理🥁

2020.04.08 05:04:58
73
阅读约 2 分钟
Scroll down

Seata 是什么? #

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

实战🍴 #

下载seata:https://github.com/seata/seata/releases

修改配置文件 #

修改conf目录下的file.conf配置文件
service模块

vgroup_mapping.my_test_tx_group = "abc_tx_group "

store模块

store {
  ## store mode: file db
  mode = "db"
  ···假装这里有代码
  url = "jdbc:mysql://localhost:3306/seata"
  user = "root"
  password = "l1itdhjaoiqw32kwqe$5asasd*a21"

在数据库新建库seata,然后新建表,表生成语句在\seata\conf\db_store.sqll
执行后生成表
img

修改registry.conf文件,目的是:指明注册中心为nacos,及修改nacos连接信息。

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
 
  nacos {
    serverAddr = "localhost:8848"
    namespace = ""
    cluster = "default"
  }

启动项目 #

先启动Nacos端口号8848,再启动seata-server.bat

创建业务数据库 #

三个数据库分别为:存储订单的数据库,存储库存的数据库,存储账户信息的数据库

CREATE DATABASE seata_order;
 
CREATE DATABASE seata_storage;
 
CREATE DATABASE seata_account;

按照上述3库分别建对应业务表

DROP TABLE IF EXISTS `t_order`;
CREATE TABLE t_order(
    `id` BIGINT(11) AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT(11) COMMENT '用户id',
    `product_id` BIGINT(11) COMMENT '产品id',
    `count` INT(11) COMMENT '数量',
    `money` DECIMAL(11,0) DEFAULT NULL COMMENT '金额',
    `status` INT(1) DEFAULT NULL COMMENT '订单状态:0:创建中; 1:已完结'
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
 
SELECT * FROM t_order;
DROP TABLE IF EXISTS `t_storage`;
CREATE TABLE t_storage(
    `id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `product_id` BIGINT(11) DEFAULT NULL COMMENT '产品id',
    `total` INT(11) DEFAULT NULL COMMENT '总库存',
    `used` INT(11) DEFAULT NULL COMMENT '已用库存',
    `residue` INT(11) DEFAULT NULL COMMENT '剩余库存'
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
 
INSERT INTO seata_storage.t_storage(`id`,`product_id`,`total`,`used`,`residue`);
VALUES('1','1','100','0','100');
 
 
SELECT * FROM t_storage;`seata_account``seata_account`

DROP TABLE IF EXISTS `t_account`;
CREATE TABLE t_account(
    `id` BIGINT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'id',
    `user_id` BIGINT(11) DEFAULT NULL COMMENT '用户id',
    `total` DECIMAL(10,0) DEFAULT NULL COMMENT '总额度',
    `used` DECIMAL(10,0) DEFAULT NULL COMMENT '已用余额',
    `residue` DECIMAL(10,0) DEFAULT '0' COMMENT '剩余可用额度'
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
 
INSERT INTO seata_account.t_account(`id`,`user_id`,`total`,`used`,`residue`)
VALUES('1','1','1000','0','1000');
 
 
 
SELECT * FROM t_account;`t_account`

创建业务回滚日志表 #

复制目录seata\conf\db_undo_log的字段,在上述创建的三个数据库内新建表。img

业务逻辑🏓 #

下订单 ->减库存–>扣余额–>改订单状态

阅读:73 . 字数:437 发布于 6 个月前
Copyright 2018-2020 Siques