SpringCloudAlibaba Seata基础&TC搭建(一)

导读:本篇文章讲解 SpringCloudAlibaba Seata基础&TC搭建(一),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Seata简介

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

Seata术语

TC(Transaction Coordinator:事务协调者):维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM(Transaction Manager:事务管理器):定义全局事务的范围,开始全局事务、提交或回滚全局事务。
RM(Resource Manager:资源管理器):管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
在这里插入图片描述

undo_log表

undo_log用于回滚日志。

  1. undo_log必须在每个业务数据库中创建,用于保存回滚操作数据。
  2. 当全局提交时,undo_log记录直接删除。
  3. 当全局回滚时,将现有数据撤销,还原至操作前的状态,详见:beforeImage和afterImage
-- the table to store seata xid data
-- 0.7.0+ add context
-- you must to init this sql for you business databese. the seata server not need it.
-- 此脚本必须初始化在你当前的业务数据库中,用于AT 模式XID记录。与server端无关(注:业务数据库)
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) 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 AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

搭建Seata TC协调者

存储模式使用DB,使用Nacos作为配置中心。

部署包下载

https://seata.io/zh-cn/blog/download.html
下载相应的版本,作者本人下载的是seata-server-1.2.0版本。

修改conf/logback.xml的文件(可选操作)

修改日志目录是为了自定义日志目录,方便日志查看。
将${user.home}改为具体的seata目录,我这里是:D:/tools/seata-server-1.2.0-nacos-mode/seata

<property name="LOG_HOME" value="D:/tools/seata-server-1.2.0-nacos-mode/seata/logs/seata"/>

使用Nacos作为Seata的配置中心

如果不用Nacos,那Seata的默认配置中心在哪呢?

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "file"

  nacos {
    ......
  }
  -- 重点
  file {
    name = "file.conf"
  }
}

没错,就是file.conf文件,接下来我们不再依靠file.conf文件而是nacos,要让seata使用nacos作为配置中心,我们需要按照以下步骤进行操作。

  1. 保证你的Nacos服务已经启动,且可以正常连接。
  2. 添加命名空间seata,获取namespace的id,我这里是62f0ae5b-38ea-4a2d-bb71-70ccbc0a8c10
    在这里插入图片描述
  3. 修改registry.conf文件
    这个文件内容分为registry和config两部分,我们使用nacos注册中心,可以可以采用默认的file方式。
  • 将registry和config部分的type=”file”都换成type=“nacos”(注意是2处地方)。
  • 将两处的nacos配置根据实际情况需要调整参数,本机启动nacos则不需要调整。
registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
  nacos {
    application = "seata-server"
    serverAddr = "192.168.230.128:8848"
    group = "SEATA_GROUP"
    # 根据自己创建的seata命名空间来设置
    namespace = "62f0ae5b-38ea-4a2d-bb71-70ccbc0a8c10"
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    serverAddr = "192.168.230.128:8848"
    namespace = "62f0ae5b-38ea-4a2d-bb71-70ccbc0a8c10"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
}
  1. 下载nacos-config脚本和config.txt,点击进入下载页
  • nacos-config.sh和nacos-config.py选择一个。
  • 在seata目录下创建一个script目录,将nacos-config.sh放入script目录下。
  • 下载config.txt文件,把文件放在seata目录下,与conf、lib目录同级,可通过nacos-config.sh脚本推送到nacos配置中心。
    在这里插入图片描述
  • 修改config.txt的内容。
    将store.mode改成db;
    mysql连接改为你自己的数据库。
    注意如果是mysql8版本,采用cj驱动,url后缀需要加serverTimezone=Asia/Shanghai
    driverClassName = “com.mysql.cj.jdbc.Driver”
    在这里插入图片描述
  • 数据库对应上述配置新建seata的DB,并分配给指定的用户权限。
  • 初始化table,注意此处一定要初始化,并且1.0之后的版本没有sql脚本,这里我贴出来。
-- the table to store GlobalSession data
drop table if exists `global_table`;
create table `global_table` (
  `xid` varchar(128)  not null,
  `transaction_id` bigint,
  `status` tinyint not null,
  `application_id` varchar(32),
  `transaction_service_group` varchar(32),
  `transaction_name` varchar(128),
  `timeout` int,
  `begin_time` bigint,
  `application_data` varchar(2000),
  `gmt_create` datetime,
  `gmt_modified` datetime,
  primary key (`xid`),
  key `idx_gmt_modified_status` (`gmt_modified`, `status`),
  key `idx_transaction_id` (`transaction_id`)
);

-- the table to store BranchSession data
drop table if exists `branch_table`;
create table `branch_table` (
  `branch_id` bigint not null,
  `xid` varchar(128) not null,
  `transaction_id` bigint ,
  `resource_group_id` varchar(32),
  `resource_id` varchar(256) ,
  `lock_key` varchar(128) ,
  `branch_type` varchar(8) ,
  `status` tinyint,
  `client_id` varchar(64),
  `application_data` varchar(2000),
  `gmt_create` datetime,
  `gmt_modified` datetime,
  primary key (`branch_id`),
  key `idx_xid` (`xid`)
);

-- the table to store lock data
drop table if exists `lock_table`;
create table `lock_table` (
  `row_key` varchar(128) not null,
  `xid` varchar(96),
  `transaction_id` long ,
  `branch_id` long,
  `resource_id` varchar(256) ,
  `table_name` varchar(32) ,
  `pk` varchar(36) ,
  `gmt_create` datetime ,
  `gmt_modified` datetime,
  primary key(`row_key`)
);
  • 打开git bash或类Linux命令行工具,执行shell脚本(注意脚本是否有执行的权限)
$ cd script
# -h 主机,你可以使用localhost,-p 端口号 ,-t 命名空间ID,-u 用户名,-p 密码
$ sh nacos-config.sh -h 192.168.230.128 -p 8848 -g SEATA_GROUP -t 62f0ae5b-38ea-4a2d-bb71-70ccbc0a8c10
 -u nacos -p nacos

在这里插入图片描述
在这里插入图片描述

  • 双击seata-server.bat,并查看nacos服务,若seata服务注册成功,表示注册中心和配置中心成功。
    在这里插入图片描述
    在这里插入图片描述

参考

分布式事务之Seata

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100053.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!