Seata下载与配置、启动

目录

    • Seata下载
    • Seata配置
    • 启动Seata

Seata下载

首先,我们需要知道我们要使用哪个版本的seata,这就要查看spring-cloud-alibaba版本说明,找到我们对应的seata。

spring-cloud-alibaba版本说明: 地址链接

下面是部分版本说明:
在这里插入图片描述

seata下载地址:https://github.com/apache/incubator-seata/releases

找到我们想要安装版本的seata,下载对应的压缩包,然后进行解压

我下载的是seata1.5.2版本

Seata Server 目录中包含以下子目录:

  • bin:用于存放 Seata Server 可执行命令
  • conf:用于存放 Seata Server 的配置文件
  • lib:用于存放 Seata Server 依赖的各种 Jar 包
  • logs:用于存放 Seata Server 的日志
  • script :用于存放脚本文件,数据库所需的SQL脚本就在这个目录下

Seata配置

配置事务存储模式

默认情况下,seata使用的是file模式进行数据持久化,如果我们想使用数据库进行数据存储,那么需要修改我们的store.mode参数

conf目录下application.example.yml为配置模板文件,application.yml是实际配置文件

将seata.store.mode修改成db,如何添加上db的相关配置

seata:config:# support: nacos, consul, apollo, zk, etcd3type: fileregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: filestore:# support: file 、 db 、 redismode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=trueuser: mysqlpassword: mysqlmin-conn: 5max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockquery-limit: 100max-wait: 5000

导入数据表

配置了mysql数据库,那么就要在mysql数据库上建立对应的seata数据库,并导入seata准备的数据表。

sql脚本在\script\server\db下,根据我们的数据库选择对应的sql脚本,因为我是mysql数据库,所以使用mysql.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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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);

主要是生成四个表,下面我介绍下这四个表

  1. global_table:全局事务表,用于记录全局事务的信息。
xid:全局事务 ID。
transaction_id:全局事务的事务 ID。
status:全局事务的状态,包括:Begin(开始)、Committing(提交中)、Rollbacking(回滚中)、TimeoutRollbacking(超时回滚中)和 TimeoutRollbackRetrying(超时回滚重试中)。
application_id:应用程序 ID。
transaction_service_group:事务组名称。
transaction_name:事务名称。
timeout:事务超时时间。
begin_time:事务开始时间。
application_data:应用程序自定义数据。
gmt_create::创建时间。
gmt_modified: 修改时间。
  1. branch_table:分支事务表,用于记录分支事务的信息。
xid:全局事务 ID。
transaction_id:分支事务的事务 ID。
resource_group_id:资源组 ID。
resource_id:资源 ID。
branch_type:分支事务类型,包括:AT(原子性事务)和 TCC(柔性事务)。
status:分支事务的状态,包括:Registered(已注册)、Committing(提交中)、Aborting(中止中)和 RollbackRetryFailed(回滚失败)。
client_id:客户端ID。
application_data:应用程序数据。
gmt_create:分支事务创建时间。
gmt_modified:分支事务最后修改时间。
  1. lock_table:全局锁表,用于在分布式事务中实现全局锁。
row_key: 锁定的数据行键值。
xid: 全局事务ID。
transaction_id: 分支事务ID。
branch_id: 分支事务标识。
resource_id: 数据库资源标识符。
table_name: 被锁定的实际业务表名。
pk: 主键列及其对应的值。
status:锁状态
gmt_create: 创建时间。
gmt_modified: 修改时间。
  1. distributed_lock:分布式锁表,用于管理分布式环境下的锁资源,防止并发冲突
lock_key: 锁的键,用于标识唯一资源。
lock_value: 锁的值,可以是任何用于区分不同锁持有者的标记。
expire: 锁的有效期或过期时间。

配置配置中心和注册中心

通过模板配置其实可以看到seata支持很多注册中心的配置使用。

下面是模板配置,我们只需要修改type为我们想要的类型,如何添加对应的配置即可

seata:config:# support: nacos 、 consul 、 apollo 、 zk  、 etcd3type: filenacos:server-addr: 127.0.0.1:8848namespace:group: SEATA_GROUPusername:password:##if use MSE Nacos with auth, mutex with username/password attribute#access-key: ""#secret-key: ""data-id: seataServer.propertiesconsul:server-addr: 127.0.0.1:8500acl-token:key: seata.propertiesapollo:appId: seata-serverapollo-meta: http://192.168.1.204:8801apollo-config-service: http://192.168.1.204:8080namespace: applicationapollo-access-key-secret:cluster: seatazk:server-addr: 127.0.0.1:2181session-timeout: 6000connect-timeout: 2000username:password:node-path: /seata/seata.propertiesetcd3:server-addr: http://localhost:2379key: seata.propertiesregistry:# support: nacos 、 eureka 、 redis 、 zk  、 consul 、 etcd3 、 sofatype: filepreferred-networks: 30.240.*nacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace:cluster: defaultusername:password:##if use MSE Nacos with auth, mutex with username/password attribute#access-key: ""#secret-key: ""eureka:service-url: http://localhost:8761/eurekaapplication: defaultweight: 1redis:server-addr: localhost:6379db: 0password:cluster: defaulttimeout: 0zk:cluster: defaultserver-addr: 127.0.0.1:2181session-timeout: 6000connect-timeout: 2000username: ""password: ""consul:cluster: defaultserver-addr: 127.0.0.1:8500acl-token:etcd3:cluster: defaultserver-addr: http://localhost:2379

我使用的是nacos,下面是我的配置部分

seata:config:# support: nacos, consul, apollo, zk, etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace:group: SEATA_GROUPusername:password:data-id: seataServer.propertiesregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacospreferred-networks: 30.240.*nacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace:cluster: defaultusername:password:

然后我们去nacos创建 seataServer.properties ,注意 namespace 、 group 、data-id 和上述 application.yml 配置中心的配置 保持一致,内容参照 详细配置链接 中配置按需配即可

详细配置模板:https://gitee.com/seata-io/seata/blob/v1.5.1/script/config-center/config.txt

我主要配置了以下三个属性

#配置事务分组
service.vgroupMapping.default_tx_group=default
service.enableDegrade=false
service.disableGlobalTransaction=false

解释:

service.vgroupMapping.default_tx_group=default
vgroupMapping 用于映射事务分组(Transaction Group)到 Seata Server 集群中的某个服务组。
default_tx_group 是你在应用中定义的一个事务分组名称,它将与 Seata Server 中的服务组 default 进行关联。这意味着当应用中指定这个事务分组时,会连接到名为 default 的 Seata Server 组。

service.enableDegrade=false
enableDegrade 参数用于设置是否开启降级模式。
当设置为 false 时,表示不启用降级模式。在分布式事务处理过程中,如果 Seata Server 不可用或出现故障,系统不会自动切换到非事务或者本地事务的方式执行,而是保持原有的事务行为。

service.disableGlobalTransaction=false
disableGlobalTransaction 参数用来控制全局事务功能的开关。
当设置为 false 时,Seata 全局事务功能是开启状态,也就是说,在你的应用中使用 Seata 时可以正常进行分布式事务管理。

事务分组如何找到后端Seata集群?

  1. 应用程序(客户端)会通过用户配置的配置中心去寻找service.vgroupMapping .[事务分组配置项],取得配置项的值就是TC集群的名称。若应用程序是SpringBoot则通过seata.service.vgroup-mapping.事务分组名=集群名称 配置

  2. 拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同(前提是Seata-Server已经完成服务注册,且Seata-Server向注册中心报告cluster名与应用程序(客户端)配置的集群名称一致)

  3. 拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表(即Seata-Server集群节点列表)

启动Seata

因为我们配置的注册中心为Nacos,所以需要先启动Nacos后然后启动seate服务,执行bin目录下的seata-server脚本即可启动

访问管理页面

http://ip:7091/

用户名密码就是 application.yml中配置的: seata/seata (可以配置修改)

在这里插入图片描述

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

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

相关文章

【MyBatis】MyBatis是什么?作用?怎么实现?

一、MyBatis是什么 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain …

虚拟机扩容后黑屏卡死解决方法

亲测有效,首先一般是在扩容后黑屏的,现象为开机后看到个横线光标不闪,黑屏,进入不了桌面。原因是硬盘已经满了,所以解决方法就是清理硬盘。所以首先还是要解决登录问题。 开机时按 esc 键进入 GNU GRUB,选择…

详解SpringCloud微服务技术栈:深入ElasticSearch(4)——ES集群

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:深入ElasticSearch(3)——数据同步(酒店管理项目&a…

新火种AI|GPT Store可能是一个“硅基人才市场”

作者:一号 编辑:美美 也许我们都错了,GPT Store可能是一个“硅基人才市场”,而不是APP Store。 如果要说在AI领域中最火的一个应用,那么在当下,毫无疑问会是ChatGPT。 2023年,全球前50的AI工…

IT行业中最重要的证书

在IT行业,拥有一些含金量较高的证书是职业发展的关键。这些证书不仅可以证明技能水平,还有助于提升在职场上的竞争力。本文将介绍几个IT行业中最重要的证书。 1. Cisco认证 CCNA(Cisco Certified Network Associate)是Cisco公司新…

LeetCode: 189.轮转数组

本篇目标了解,翻转数组的经典解法, 189. 轮转数组 - 力扣(LeetCode) 目录 基本方法概述: 1,翻转做法,推荐时O(n),空(1) 2&#x…

J-Link:STM32使用J-LINK烧录程序,其他MCU也通用

说明:本文记录使用J-LINK烧录STM32程序的过程。 1. J-LINK驱动、软件下载 1、首先拥有硬件J-Link烧录器。 2、安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com 直接下载就可以了。 2.如何使用J-LINK向STM32烧写程序 1、安装好以后打开J-LINK Fl…

黑方备份学习(1):linux安装 黑方容灾备份与恢复系统软件v6.0 代理

1.环境准备 1.1硬件环境 内存>4G,cpu最低双核 1.2把SElinux状态改为Disabled (1)查看SElinux状态 输入getenforce命令 SELinux共有3个状态: enforcing (执行中)、permissive (不执行但…

SOME/IP 协议介绍(七)传输 CAN 和 FlexRay 帧

SOME/IP 不应仅用于传输 CAN 或 FlexRay 帧。但是,消息 ID 空间需要在两种用例之间进行协调。 传输 CAN/FlexRay 应使用完整的 SOME/IP 标头。 AUTOSAR Socket-Adapter 使用消息 ID 和长度来构建所需的内部 PDU,但不会查看其他字段。因此,必…

029-安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

029-安全开发-JS应用&DOM树&加密编码库&断点调试&逆向分析&元素属性操作 #知识点: 1、JS技术-DOM树操作及安全隐患 2、JS技术-加密编码及数据安全调试 演示案例: ➢JS原生开发-DOM树-用户交互 ➢JS导入库开发-编码加密-逆向调试 ➢两…

Python之数据可视化(地图)

目录 一 基础地图应用 二 全国疫情图 一 数据准备 二 数据处理 二 湖北省疫情图 一 数据准备 二 数据处理 一 基础地图应用 导入map地图对象 from pyecharts.charts import Map map Map() 写入数据 data [("北京市",100),("上海市"…

Ansible自动化运维实战

一、abstract简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.无客户端。我们要学一些Ansible的安装和一些基…

【劳德巴赫 Trace32 高阶系列 4 -- Trace32 JTAG 常用命令】

文章目录 Trace32 JTAG 常用命令JTAG.PINJTAG 信号值读取JTAG.SHIFTREGExampleJTAG.SHIFTTDIExampleJTAG.SHIFTTMSExampleJTAG.PROGRAM.SVFTrace32 JTAG 常用命令 JTAG (Joint Test Action Group) 是一种常用的调试和测试标准,用于在电子系统的芯片和板级测试中。在JTAG标准中…

2024最新版MongoDB安装使用指南

2024最新版MongoDB安装使用指南 Installation and Usage Guide of the Latest MongoDB Community Edition in 2024 By JacksonML MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need. – mon…

gitlib部署及应用

一. 下载源网址 Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /gitlab-ce/yum/el7/ | 清华大学开源软件…

2024-01-06-AI 大模型全栈工程师 - 大模型时代的 AI 产品新挑战

摘要 2024-01-06 周六 杭州 晴 课程内容 1. 上一代 AI 能做什么? 2. AI 的能力演进 3. LLMS 带来了哪些变化 4. LLMS 存在哪些问题 5. LLMS 落地的三个关键要素 6. LLMS 短期落地的方向-内容生成 7. LLMS 中期落地的方向-智能体 8. 从 LLMS 到可落地的应用 9. LL…

八种Flink任务监控告警方式

目录 一、Flink应用分析 1.1 Flink任务生命周期 1.2 Flink应用告警视角分析 二、监控告警方案说明 2.1 监控消息队中间件消费者偏移量 2.2 通过调度系统监控Flink任务运行状态 2.3 引入开源服的SDK工具实现 2.4 调用FlinkRestApi实现任务监控告警 2.5 定时去查询目标库…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

堆溢出:深入理解与防范

在计算机安全领域中,堆溢出是一种常见的安全漏洞,它涉及到程序中的内存分配和管理。本文将深入探讨堆溢出的概念、原因以及防范措施。 首先,我们需要了解什么是堆。在许多编程语言中,如C和C,堆是用于动态内存分配的区…

adb push 将电脑中的文件传输到安卓开发板

1. adb remount 重新挂载设备的文件系统,以便可以对设备进行读写操作,通常情况下,安卓开发板在连接到计算机后,设备的文件系统会被挂载为只读文件系统,重新挂载后变成可读可写权限 C:\Users\Administrator>adb re…