暗中观察

Seata 使用指南
Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系...
扫描右侧二维码阅读全文
12
2021/12

Seata 使用指南

Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成

一、安装Seata-Server端

seata_install.png

地址:https://github.com/seata/seata/releases
修改配置文件file.conf,新建数据库导入脚本,
脚本地址:https://github.com/seata/seata/tree/1.4.2/script/server/db

seata_install_server_db.png

修改registry.conf,注册中心和配置中心使用nacos
seata-server-register.png

用以下命令启动

cd /usr/local/seata/
sh seata-server.sh -p 8091 -h 127.0.0.1 &

二、项目集成

2.1 undo_log建表、配置参数
介绍:项目使用SpringCloud,多个服务多个库,每个业务库添加seata-client需要的undo_log脚本
脚本地址:https://github.com/seata/seata/blob/1.4.2/script/client/at/db/
seata-client-db.png
2.2 项目添加依赖

        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>最新版</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.3 代理数据源

@Primary
@Bean("dataSource")
public DataSource dataSource() {
    //AT 代理 二选一
    return new DataSourceProxy(routingDataSource());
//        //XA 代理
//        return new DataSourceProxyXA(druidDataSource)
}

三、测试项目

what-is-seata.png

为示例业务创建表

    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;

以下为测试代码展示,业务入口处加入@GlobalTransactional,最终无论业务哪个地方模拟失败,几个库数据都回滚成功。
seata-demo-1.png
seata-demo-2.png
seata-demo-3.png

四、参考文档

1 官网:https://seata.io/zh-cn/

2 部署:https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html

3 样例: https://github.com/seata/seata-samples/tree/master/springcloud-nacos-seata

4 AT模式:https://seata.io/zh-cn/docs/dev/mode/at-mode.html

最后修改:2022 年 05 月 06 日 05 : 40 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论