您当前的位置: 首页 > 

水的精神

暂无认证

  • 6浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

安装与使用seata

水的精神 发布时间:2021-08-13 22:05:12 ,浏览量:6

  最好的案例还是官方文档。移步这里: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服务端
  1.  下载需要的安装包,可以下载linux版,和windows版。这是下载的链接:https://github.com/seata/seata/releases    然后让我们们找到1.3.0发版本的seata。然后下载。
  2. 下载下来以后就是下边这样(解压后的)其中启动脚本就在bin目录下。需要修改的配置文件就在conf目录下。
  3.  下载下来安装包以后,可以在配置文件中修改必备的配置文件。因为seata想当于是第三方事物管理品台,它自然要把事物信息维护在一个地方,目前seata支持的有本地文件的方式,数据库的方式,还有就是redis的方式。修改配置文件的地方如下:第一个就是配置数据源的配置文件。下边的是配置 配置中心的文件。
  4.  我们就选择数据库的方式。然后去修改配置文件。也就是进到conf目录下->修改file.conf文件。需要配置的项如下:
  5. 这个时候我们还没有创建表,需要手动的去执行一下脚本,其中创建表的脚本在这里:https://github.com/seata/seata/blob/1.4.0/script/server/db/mysql.sql
  6. 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;

  7. 再来看看seata是如何支持高可用的:实际上上边已经提到了注册中心的概念。我们可以用一个注册中心,来记录我们的 seata服务端的多个服务实例。此外seata是支持把配置文件放在配置中心,供我们的多份seata服务端实例来读取配置的。在alibaba体系中呢,注册中心和配置中心实际上我们选用nacos是最好不过的。(这里高可用的方案,过程写的比较简单)可以再参考一下官网:http://seata.io/zh-cn/docs/ops/deploy-ha.html
  8.  其实关于如何把这些配置文件推到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的服务地址也是可以的。

 

 部署客户端

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

  1. 引入依赖: 注意版本号,要用和你的springCloudAlibaba的版本保持适配
    
    
        com.alibaba.cloud
        spring-cloud-alibaba-seata
        2.2.0.RELEASE
    
    

  2.  需要创建一个undo表,创建表的内容如下:
  3.   
    -- 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';

  4. 需要在我们的客户端配置 注册中心以及配置中心,这个并不难,只需要在yml文件中,添加对应的配置就可以了。既然是客户端,其实最重要的就是要知道我们的服务端在哪里,也就是事物管理者。上边的步骤已经把我们的服务端注册在了nacos注册中心。如下图下边红框就是。
  5. 然后在我们之前开启本地事物的地方,换成 @GlobalTransactional

 

 

 

 

 

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0505s