最好的案例还是官方文档。移步这里:​​http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html​

版本问题

  之前用过阿里开源的sentinel,即使是跟着官方文档也遇到了不少的坑。sentinel的官网,写的确实潦草了一点。seata还不错,至少在安装入门篇,就把我们引导到了版本相关的页面上来。我们一定要根据他们推荐的版本来配置。否则,会遇上非常多的问题,即使能解决也要花费不少的时间。所以这个弯路大家最好还是省了,乖乖看看官方推荐的版本吧:

  链接:​​https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E​

  虽然seata官方版本已经出到 1.4.1了,但是推荐的版本上还会没有最新的。可以直接看下边的关于版本的图片。

安装与使用seata_配置文件

 

单独部署seata服务端

  1. 下载需要的安装包,可以下载linux版,和windows版。这是下载的链接:​​https://github.com/seata/seata/releases​​    然后让我们们找到1.3.0发版本的seata。然后下载。
  2. 下载下来以后就是下边这样(解压后的)其中启动脚本就在bin目录下。需要修改的配置文件就在conf目录下。
  3. 安装与使用seata_配置文件_02

  4. 下载下来安装包以后,可以在配置文件中修改必备的配置文件。因为seata想当于是第三方事物管理品台,它自然要把事物信息维护在一个地方,目前seata支持的有本地文件的方式,数据库的方式,还有就是redis的方式。修改配置文件的地方如下:第一个就是配置数据源的配置文件。下边的是配置 配置中心的文件。
  5. 安装与使用seata_配置文件_03

  6. 我们就选择数据库的方式。然后去修改配置文件。也就是进到conf目录下->修改file.conf文件。需要配置的项如下:
  7. 安装与使用seata_服务端_04

  8. 这个时候我们还没有创建表,需要手动的去执行一下脚本,其中创建表的脚本在这里:​​https://github.com/seata/seata/blob/1.4.0/script/server/db/mysql.sql​
  9. sql 内容如下:
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `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`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;

-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(96),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
  1. 再来看看seata是如何支持高可用的:实际上上边已经提到了注册中心的概念。我们可以用一个注册中心,来记录我们的 seata服务端的多个服务实例。此外seata是支持把配置文件放在配置中心,供我们的多份seata服务端实例来读取配置的。在alibaba体系中呢,注册中心和配置中心实际上我们选用nacos是最好不过的。(这里高可用的方案,过程写的比较简单)可以再参考一下官网:​​http://seata.io/zh-cn/docs/ops/deploy-ha.html​
  2. 安装与使用seata_github_05

  3. 其实关于如何把这些配置文件推到nacos,实际上seata也是为我们准备了脚本的。先看一下脚本在哪里:​​https://github.com/seata/seata/tree/1.4.0/script/config-center/nacos​​  注意这个脚本是要配合配置文件config.txt 一起放在安装nacos的服务器上来运行的 (config.txt的对祖地址:​https://github.com/seata/seata/blob/1.4.0/script/config-center/config.txt​​),它可以把所有的配置推到nacos。或者修改脚本内容里边的nacos的服务地址也是可以的。
  4. 安装与使用seata_配置文件_06

 

 部署客户端

  所谓的客户端,准确的来说应嘎是我们用到的各个微服务。比如电商系统里边的订单系统,仓储系统。

  1. 引入依赖: 注意版本号,要用和你的springCloudAlibaba的版本保持适配
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-seata -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
  1. 需要创建一个undo表,创建表的内容如下:
  
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
`branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id',
`context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
`rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',
`log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` DATETIME(6) NOT NULL COMMENT 'create datetime',
`log_modified` DATETIME(6) NOT NULL COMMENT 'modify datetime',
UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
  1. 需要在我们的客户端配置 注册中心以及配置中心,这个并不难,只需要在yml文件中,添加对应的配置就可以了。既然是客户端,其实最重要的就是要知道我们的服务端在哪里,也就是事物管理者。上边的步骤已经把我们的服务端注册在了nacos注册中心。如下图下边红框就是。
  2. 安装与使用seata_配置文件_07

  3. 然后在我们之前开启本地事物的地方,换成@GlobalTransactional
  4. 安装与使用seata_github_08