1.Seata 1.5.2 seata-server搭建

一:Seata基本介绍

Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

详见官网链接:https://seata.apache.org/zh-cn/

1.历史项目里的使用经验:

之前公司里的oem用户对应的App计划停服,通告用户手动确认迁移到obm的用户App,oem 和 obm 用户的数据表结构完全一样,只是不同App对应的数据分别存储在不同的库,需要保证用户在迁移后,oem库里清除用户数据而obm库里同步新增用户的数据。迁移后数据需要保证的一致性。这几天工作不太忙,利用碎片时间重新搭建了一套也顺便记录下整个搭建过程。

二:Seata-server搭建

2.1 版本选择

Seata 也是CS结构的服务类型,需要有一个Seata-server端。需要注意的是:版本的选择需要和自己项目中其他的框架版本适配。

我的版本选择如下:

组件 版本
spring-boot 2.6.11
spring-cloud 2021.0.4
spring-cloud-alibaba 2021.0.4.0
nacos 2.0.4
seata 1.5.2

官网上推荐的版本适配截图见下:

2.2 seata-server 下载

从seata 官网进去后,寻找下载页面 中的对应版本。

具体的链接为:https://seata.apache.org/zh-cn/unversioned/release-history/seata-server

下载后,解压zip包:

2.3 初始化DB脚本

文件路径:seata\script\server\db\mysql.sql

内容如下:

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_status_gmt_modified` (`status` , `gmt_modified`),
    KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

-- 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 = utf8mb4;

-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
    `row_key`        VARCHAR(128) NOT NULL,
    `xid`            VARCHAR(128),
    `transaction_id` BIGINT,
    `branch_id`      BIGINT       NOT NULL,
    `resource_id`    VARCHAR(256),
    `table_name`     VARCHAR(32),
    `pk`             VARCHAR(36),
    `status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',
    `gmt_create`     DATETIME,
    `gmt_modified`   DATETIME,
    PRIMARY KEY (`row_key`),
    KEY `idx_status` (`status`),
    KEY `idx_branch_id` (`branch_id`),
    KEY `idx_xid_and_branch_id` (`xid` , `branch_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

CREATE TABLE IF NOT EXISTS `distributed_lock`
(
    `lock_key`       CHAR(20) NOT NULL,
    `lock_value`     VARCHAR(20) NOT NULL,
    `expire`         BIGINT,
    primary key (`lock_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);

创建一个新库:seata

在新库里执行mysql.sql

2.4 配置文件编辑

文件路径:seata\conf\application.yml

application.yml 的配置信息可以参在官方给出的application.example.yml文件的配置。

yaml 复制代码
# seata-server 对应的端口
server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${user.home}/logs/seata
  extend:
    logstash-appender:
      destination: 127.0.0.1:4560
    kafka-appender:
      bootstrap-servers: 127.0.0.1:9092
      topic: logback_to_logstash
      
# seata控制台的账号密码
console:
  user:
    username: seata
    password: seata

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    #以nacos 作为配置中心,具体nacos配置根据自己的nacos调整
    type: nacos 
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: d6eccad6-681c-4133-b9ff-1abcd951297a 
      group: DOLPHIN_GROUP
      username: nacos
      password: nacos
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
     #以nacos 作为注册中心,具体nacos配置根据自己的nacos调整
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: DOLPHIN_GROUP
      namespace: d6eccad6-681c-4133-b9ff-1abcd951297a
      cluster: default
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
  store:
    # support: file 、 db 、 redis
    #以db作为存储中心,具体存储配置根据自己的选择配
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 步骤2.3里初始化DB脚本时创建的库
      url: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
      user: root
      password: myPwd
      min-conn: 5
      max-conn: 100
      global-table: global_table
      branch-table: branch_table
      lock-table: lock_table
      distributed-lock-table: distributed_lock
      query-limit: 100
      max-wait: 5000
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

2.5 seata-server启动

seata\bin 目录下:

注意:启动log如下。监听的端口是8091. 是在启动的端口7091 + 1000 .配置文件里可见这个规则。

yaml 复制代码
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'

2.6 seata-server 控制台登录

登录地址:localhost:7092

账号密码:见application.yml 中控制台配置

相关推荐
仙俊红8 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥8 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
廋到被风吹走8 小时前
【Spring】Spring Cloud 熔断降级深度解析:从 Hystrix 到 Resilience4j 的演进
spring·spring cloud·hystrix
fenglllle9 小时前
spring-data-jpa saveall慢的原因
数据库·spring·hibernate
czlczl200209259 小时前
Guava Cache 原理与实战
java·后端·spring
阿湯哥12 小时前
Spring AI Alibaba 实现 Workflow 全指南
java·人工智能·spring
萧曵 丶15 小时前
Spring Cloud Alibaba 详解
spring·spring cloud
szm022515 小时前
Spring
java·后端·spring
萧曵 丶16 小时前
Spring 全套高频面试题(由浅到深 完整版)
java·后端·spring
雨中飘荡的记忆18 小时前
Spring Security入门:构建安全应用
spring