mac | Windows 本地部署 Seata2.0.0,Nacos 作为配置中心、注册中心,MySQL 存储信息

1、本人环境介绍

系统 macOS sonama 14.1.1

MySQL 8.2.0 (官方默认是5.7版本)

Seata 2.0.0

Nacos 2.2.3

2、下载&数据库初始化

默认你已经有 Nacos、MySQL,如果没有 Nacos 请参考我的文章 :
Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息

进行安装部署

Seata 下载地址:点此下载

2.1、下载到本地之后解压

注意:1.5版本(不记得是不是这个版本)之后没有那个registy.conf的配置了,直接在.yml文件中配置即可,你知道这回事就行了,别再傻傻地去搞那个registry

2.2、创建数据库表

1、 创建名称为 seata 的数据库
2、导入数据库表,脚本如下:

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` (`xid`)
) 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);

3、查看效果

3、配置 seata

3.1、配置 .yml

我直接上我的配置给大家参考,至于都有哪些可配置项,可以参考application.example.yml 这个文件

yml 复制代码
server:
  port: 7091

spring:
  application:
    name: seata-server

logging:
  config: classpath:logback-spring.xml
  file:
    path: ${log.home:${user.home}/logs/seata}

console:
  user:
    username: seata
    password: seata
seata:
  # 配置中心
  config:
    type: nacos # 指定使用 nacos 作为配置中心
    nacos:
      server-addr: 127.0.0.1:8848
      namespace:  d50a537a-65ce-4c85-8b6f-e05a2518f1f4 # 命名空间,如果不写默认使用 Nacos 的 public 命名空间
      group: DEFAULT_GROUP # 我直接用 Nacos 的默认,你也可以自己起一个分组叫做 SEATA_GROUP
      username: nacos # 如果你的 nacos 没配置账号密码则不需要写这两项
      password: nacos
      data-id: seataServer.properties # 也就是配置中心 Nacos 上的文件名称
  # 注册中心
  registry:
    type: nacos
    nacos:
      application: seata-server # seata tc 服务注册到 nacos的服务名称,可以自定义,需与上面的 spring.application.name属性一致
      server-addr: 127.0.0.1:8848
      group: DEFAULT_GROUP
      namespace: d50a537a-65ce-4c85-8b6f-e05a2518f1f4
      # cluster: 
      username: nacos
      password: nacos
  #  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,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/metadata/v1/**

3.2、配置Nacos 配置中心

官方给出了一个 config.txt 来配置,参考链接:config.txt

大家可自行参考上面的配置项目,我这里简单配置主要的数据库部分即可,多余的不配置会自动使用默认设置

在 nacos 中做如下操作:

3.2.1 创建命名空间

也就是上方提到的 .yml 文件中使用的 namespace,如果你没配置的话也可以,那么 .yml 文件中 namespace 字段不写即可

3.2.2、创建 seataServer.properties 配置文件


配置内容填入如下信息:

properties 复制代码
#事务会话信息存储方式
store.mode=db
#事务锁信息存储方式
store.lock.mode=db
#事务回话信息存储方式
store.session.mode=db

#存储方式为db
store.db.dbType=mysql # 设置使用的存储类型是 mysql
store.db.datasource=druid
store.db.driverClassName=com.mysql.cj.jdbc.Driver
# 下方你的数据库名称如果不是 seata 记得修正
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&useSSL=false
store.db.user=root # 写你的数据库用户
store.db.password=root 写你的数据库密码
store.db.minConn=5
store.db.maxConn=30
store.db.queryLimit=100
store.db.maxWait=5000
# 下面 4 项对应的数据库中几张数据表
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.lockTable=lock_table
store.db.distributedLockTable=distributed_lock

注意:不需要像网上其它文章说的那样需要使用 script\目录下的脚本将 config.txt 一项一项导入到 nacos 中!按照我的配置即可

最终的配置中心效果如下:

如果你没指定 namespce ,则将创建在上图 public选项卡下。

4、启动 Seata

是不是到了激动人心的时刻?

进入到 bin\ 目录

4.1、执行启动命令

前提:注意看有没有执行权限,没有的话记得 chmod +x seata-server.sh

bash 复制代码
# 如果是 Windows 系统则直接双击 `seata-server.bat` 即可
sh seata-server.sh

此时控制台会输出如下信息:

此时去看 nacos 的服务列表看到如下信息证明你成功启动了~

但是!!!

如果不成功,我也是踩坑过来的人

请打开启动脚本 sh seata-server.sh 并编辑

找到 start_server() 函数,将 nohup 后台启动的改成前台启动

即:

bash 复制代码
nohup $JAVACMD ${JAVA_OPT} ${NEW_ARGS} >> /dev/null 2>&1 &

先替换成:

$JAVACMD ${JAVA_OPT} ${NEW_ARGS}

让其以前台形式启动,这样子你就可以看到 Spring Boot 启动的日志了,便可看到你哪里报错了

这个版本你按照我的配置进行,应该是不会错了,因为我之前学别人的配置遇到的报错都已经解决了。希望能帮助到大家,不要再被一些人坑了~

对你有帮助别忘了点赞收藏

至于整合 Spring Boot请大家自行参考其它教程!

相关推荐
Stringzhua14 天前
【SpringCloud】Seata微服务事务
spring cloud·微服务·seata
君哥聊技术15 天前
Apache Seata 新版本集成了 RocketMQ 事务消息
rocketmq·seata
IT云清18 天前
Apache Seata Raft模式配置中心
java·分布式·apache·seata·分布式事务
灰色孤星A1 个月前
分布式事务学习笔记(四)微服务实现Stata AT模式、Stata Saga模式介绍
微服务·seata·分布式事务·at模式·saga模式·微服务实现seata
灰色孤星A2 个月前
分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
分布式·微服务·架构·seata·分布式事务·tc服务器·微服务集成seata
江喜原2 个月前
Seata
数据库·分布式·mysql·seata
长安初雪2 个月前
微服务集成 Seata
微服务·云原生·架构·seata·分布式事务
马剑威(威哥爱编程)3 个月前
分布式事务Seata的4种模式详解
java·分布式·spring cloud·事务·seata·威哥爱编程
真我的风采i3 个月前
初始化seata在nacos的配置报错nacos-config.sh 127.0.0.1-nacos-config.txt-文件不存在
java·windows·git·nacos·seata·sh脚本
ideal-cs3 个月前
索引:SpringCloudAlibaba分布式组件全部框架笔记
nacos·gateway·sentinel·seata·springcloud·openfeign·cloudalibaba