Seata之 Win系统和 Linux系统搭建

news2024/11/28 3:28:03

文章目录

  • 1 Seata搭建
    • 1.1 Linux环境搭建
      • 1.1.1 准备工作
      • 1.1.2 下载
      • 1.1.3 建表
      • 1.1.4 配置 nacos
        • 1.1.4.1 新建命名空间
        • 1.1.4.2 上传配置至Nacos配置中心
        • 1.1.4.3 不上传而使用配置
      • 1.1.5 修改 appplication.yml
        • 1.1.5.1 seata.store
        • 1.1.5.2 seata.config
        • 1.1.5.3 seata.registry
      • 1.1.6 启动
    • 1.2 Windows环境搭建
      • 1.2.1 下载安装包
      • 1.2.2 建表
      • 1.2.3 配置nacos
      • 1.2.4 修改 application.yml
      • 1.2.5 启动

1 Seata搭建

1.1 Linux环境搭建

1.1.1 准备工作

Seata 是一个分布式事务,seata 服务端也是一个微服务,需要和其他微服务一样需要注册中心和配置中心。同时事务回滚,需要数据库日志记录。
注册中心和配置中心: nacos(点击了解Nacos原理和使用)
数据库: mysql(点击了解Linux下安装MySQL)

1.1.2 下载

进入Seata的github官网下载,下载版本是1.6.0,找到 seata-server-1.6.0.tar.gz下载。解压文件后进入seata文件。

1.1.3 建表

新建数据库seata,然后在 seata 文件夹里面的 script 文件,找到server -> db -> mysql.sql,在数据库中执行sql语句:

-- 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);

全局事务会话由:全局事务分支事务全局锁,对应表分别为global_tablebranch_tablelock_table

1.1.4 配置 nacos

1.1.4.1 新建命名空间

nacos 控制台添加新的命名空间:
在这里插入图片描述
添加一条 seata,命名空间ID在后面需要用到:
在这里插入图片描述

1.1.4.2 上传配置至Nacos配置中心

进到 seata 目录中,找到 nacos-config.sh 文件,路径:script -> config-center -> nacos -> nacos-config.sh。执行nacos-config.sh脚本:

sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -t xxxx -u username -w password

参数详解:

  • -h:nacos服务IP
  • -p:nacos服务端口
  • -u:nacos登录名
  • -w:nacos登录密码
  • -g:nacos 配置的分组名称,默认设置SEATA_GROUP
  • -t:上一步配置的命名空间ID

执行脚本之后,输出以下脚本:

Set server.maxCommitRetryTimeout=-1 successfully 
Set server.maxRollbackRetryTimeout=-1 successfully 
Set server.rollbackRetryTimeoutUnlockEnable=false successfully 
Set server.distributedLockExpireTime=10000 successfully 
Set server.xaerNotaRetryTimeout=60000 successfully 
Set server.session.branchAsyncQueueSize=5000 successfully 
Set server.session.enableBranchAsyncRemove=false successfully 
Set server.enableParallelRequestHandle=false successfully 
Set metrics.enabled=false successfully 
Set metrics.registryType=compact successfully 
Set metrics.exporterList=prometheus successfully 
Set metrics.exporterPrometheusPort=9898 successfully 

再去nacos控制台查看配置:
在这里插入图片描述

1.1.4.3 不上传而使用配置

在nacos中 创建 seataServer.properties 文件
在这里插入图片描述
配置文件参考官方:https://seata.io/zh-cn/docs/user/configurations.html
windows一般使用这种方式,不过Linux两种都可以

1.1.5 修改 appplication.yml

找到 appplication.yml 文件,路径为:seata -> conf -> application.yml

1.1.5.1 seata.store

seata.store 配置 seata 的存储,修改 store.mode="db":

seata:
  store:
    # support: file 、 db 、 redis
    mode: db

修改数据库连接,将 seata -> conf -> application.example.yml 中附带额外配置,将其db相关配置复制至application.yml,修改 store.db 相关属性。数据库是步骤一配置的数据库:

seata:
  store:
    # support: file 、 db 、 redis
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://xxxxx:3306/seata?rewriteBatchedStatements=true
      user: xxxx
      password: xxx
      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

1.1.5.2 seata.config

seata.config 是配置 nacos 配置中心相关的配置。将 seata.config.type 修改成nacos

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos

然后添加 seata.config.nacos 相关的配置:

seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group : SEATA_GROUP
      namespace: xxxxx
      username: xxx
      password: xxx

其中 namespacenacos 命名空间ID而不是名称

1.1.5.3 seata.registry

seata.registry 是配置注册中心相关字段,将 seata 服务作为一个微服务注册到注册中心。将 registry.type 改成 nacos ,配置如下:

seata:
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server
      serverAddr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: xxxxxx
      username: xxxx
      password: xxx

namespace也是是 nacos 命名空间ID而不是名称

1.1.6 启动

找到 seata 文件中的 bin 目录,执行启动命令:

sh seata-server.sh -h 127.0.0.1 -p 8091 -m db

控制台输出:

apm-skywalking not enabled
seata-server is starting, you can check the /opt/seata/logs/start.out

打开 start.out 日志:
在这里插入图片描述

系统启动成功,再登录 http://127.0.0.1:7091,就能看到seata控制台信息。

nacos控制台服务列表新增了一个服务,说明seata服务成功注册到了nacos注册中心:
在这里插入图片描述

1.2 Windows环境搭建

1.2.1 下载安装包

进入Seata的github官网可以下载windows的zip包,或者在Seata官网直接下在windows的zip包,下载版本是1.6.0,找到 seata-server-1.6.0.zip下载

1.2.2 建表

同上面的建表步骤,还是在路径:script\server\db\文件夹下的mysql.sql

1.2.3 配置nacos

在nacos中 创建 seataServer.properties 文件
在这里插入图片描述
配置文件参考官方:https://seata.io/zh-cn/docs/user/configurations.html

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seatab?useUnicode=true&rewriteBatchedStatements=true&serverTimezone=GMT
 
store.db.user=xxxx
store.db.password=xxxx
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事务、日志等配置
server.recovery.committingRetryPeriod=3000
server.recovery.asynCommittingRetryPeriod=3000
server.recovery.rollbackingRetryPeriod=3000
server.recovery.timeoutRetryPeriod=3000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
 
# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

1.2.4 修改 application.yml

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  
console:
  user:
    username: seata
    password: seata     
seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace: seata
      group: SEATA_GROUP
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
      data-id: seataServer.properties
 
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    # preferred-networks: 30.240.*
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: dev
      #cluster: SH
      username: nacos
      password: nacos
      ##if use MSE Nacos with auth, mutex with username/password attribute
      #access-key: ""
      #secret-key: ""
    
  store:
    # support: file 、 db 、 redis
    mode: db
    db:
      datasource: druid
      db-type: mysql
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&serverTimezone=GMT
      user: xxxx
      password: xxxx
      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

1.2.5 启动

找到 seata 文件中的 bin 目录
双击 seata-server.bat 文件,在浏览器中输入:http://127.0.0.1:7091/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多模态:InstructBLIP

多模态:InstructBLIP IntroductionMethoddatasetInstruction-aware 视觉提取架构Dataset Balance 实验参考 Introduction 作者表示,与nlp任务不同,多模态任务由于引入额外的视觉输入,它的任务更加多样化,这似的联合多…

Immich让你从此告别百度网盘备份手机照片

一. Immich 是什么 Immich是一个开源的图片自托管服务,它能实现类似于百度网盘的照片自动备份、分类等功能,它同时提供了Web管理页面,和移动端APP,可以轻松备份手机中的照片至家庭服务器中。这一应用也在很多群辉玩家中用于替代“…

在 Windows 上安装 Helm包

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,让我们一起学习在 Windows 上安装 Helm包。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Helm是什么 Helm是Kubernetes的包管理工具,类似于centos的yum,能够快速查找、下载和安装…

(2022 EMNLP)结合面部表情的情感分析

论文题目(Title):Face-Sensitive Image-to-Emotional-Text Cross-modal Translation for Multimodal Aspect-based Sentiment Analysis 研究问题(Question):面向面部敏感的图像-情感-文本翻译的跨模态的多…

【开源项目】TinyId 全网最好的分布式ID生成系统的源码解析

TINYID介绍 项目地址:https://github.com/didi/tinyid Tinyid是滴滴开发的一款分布式ID系统,Tinyid是在美团(Leaf)的leaf-segment算法基础上升级而来,不仅支持了数据库多主节点模式,还提供了tinyid-client客…

23种设计模式之适配器模式(Adapter Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的适配器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…

[GYCTF2020]EasyThinking

功能:登录,注册,搜索 回显登录用户名,搜索历史 简单测试搜索历史发现可能不存在sql注入 www.zip下载源码 访问一个不存在的路径,爆出 thinkphp的框架,版本是6.0.0 参考:ThinkPHP 6.0.1 漏洞…

MyBatis操作数据库实现增删改查

创建数据库 语句要分别执行 CREATE DATABASE mybatis;USE mybatis;CREATE TABLE user(id INT(10) NOT NULL PRIMARY KEY,name VARCHAR(20) DEFAULT NULL,INSERT INTO user(id,name,pwd) VALUES (1,张三,123456), (2,李四,121212), (3,王五,1314520) 搭配环境 1、在pojo包创…

25.基于混合整数规划方法的微网电池储能容量优化配置

关键词:储能容量优化 储能配置 微网 编程语言:matlab 主题:基于混合整数规划方法的微网电池储能容量优化配置 主要内容: 本代码目的为实现微电网内电池容量的优化配置,目标函数为配置过程中整体的运行成本最小或…

【Spring】Spring AOP面向切面编程

文章目录 什么是Spring AOP?为什么要使用AOP?AOP相关组成的概念切面切点通知连接点 Spring AOP实现创建切面创建切点创建通知创建连接点示例演示 Spring AOP的实现原理 什么是Spring AOP? 想要知道Spring AOP,就得先了解AOP AOP是…

【周期信号】工程测试-数据处理-信号分析课程试题:周期信号与周期信号相加,所得信号一定是周期信号吗?

一、问题分析 某课程的作业题中,有下面的一种题目,判断两个周期信号相加,是否是周期信号,以及计算周期长短是多少。 非常显然,1、3、4题都很容易判断。 第2题,我们重点分析。 二、网上的错误论述 在百…

Vivado运用 Language Template 来创建set_input_delay/set_output...

时序约束中的 set_input_delay/set_output_delay 约束一直是一个难点,无论是概念、约束值的计算,还是最终的路径分析,每一次都要费一番脑子。Vivado为方便用户创建输入输出接口的约束,整理出了一套非常实用的InputDelay/Output De…

【C++】类与对象(3)

【C】类与对象(3) 作者:爱写代码的刚子 时间:2023.5.9 本篇博客干货比较多,主要是对类和对象知识的进一步加深,可能有点晦涩。主要介绍的内容为:深入构造函数,初始化列表&#xff0c…

《操作系统》——进程与线程

在上一期博客中,我们学习了关于操作系统中计算机系统概述的基本知识。今天,我将带领学习的是关于操作系统中一个非常重要的概念——进程与线程!!! 目录 前言 (一)进程的基本概念和特征 1、进…

[golang gin框架] 33.Gin 商城项目- 集成支付宝微信支付、生成支付二维码、监听处理异步通知跳转到订单页面

一.界面展示 当用户点击去支付时,请求支付界面,并 展示对应订单相关数据,以及 支付方式相关操作,点击对应的支付方式,进行支付操作 该界面对应的功能: 1.进入该界面,后台逻辑判断: 是否存在该订单,如果不存在,则跳转到购物车页面;如果存在,则获取对应订单相关数据,并 渲染到页面…

0511课后作业(C高级)

1.编写一个名为myfirstshell.sh的脚本,它包括以下内容。 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

iOS播放与编辑HDR视频

在iPhone12发布后,支持使用Dolby Vision来录制HDR视频。至此,升级到iOS14.1系统后,已经支持录制、播放、编辑和导出HDR视频。接下来,让我们一起探索HDR视频的各种操作。 一、HDR视频边编辑边预览 1、Profile与Level HDR视频中&…

Java奠基】实现面向对象编程方法

目录 标准的JavaBean类 设计对象并使用 对象封装 this关键字 构造方法 要知道对象是一个又一个能帮助我们解决问题的东西,但是这些东西并不是凭空出现的,需要我们根据设计图来进行制造,而这些一个一个的设计图就是一个一个的类。 标准的…

ChatGPT分销版多开v3.9.1-新增 语音识别和绘画多个引擎-已测试

众所周知ChatGPT在国内是无法正常使用的 而我们模块要做的就是这一点让普通人使用上ChatGPT 或娱乐或作为生产力工具 当前ChatGPT是非常火的 但是国内环境复杂,所以机会来了。。。 ChatGPT分销版多开v3.9.1:公众号H5版本 目前没反编译前端容易封号…

计算机网络-SNMP协议与pysnmp

1.概念 2.典型架构 3.snmp的信息交互 4.MIB 4.1常见MIB节点 5.SNMP管理模型 MIB位于被管理进程 6.SNMP的三个版本 6.1 SNMPv1 6.2 SNMPv2C 6.3 SNMPv3 6.3.1 SNMP3的基本操作 6.3.2 SNMP交互GET 6.3.3 SNMP交互-GETBULK 6.3.4 SNMP交互-SET 6.3.5 SNMP交互-trap 6.3.6 SNMP交…