跳到主要内容

Seata 服务端配置

Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,旨在解决微服务架构下的分布式事务问题。Seata服务端是Seata的核心组件之一,负责协调和管理全局事务。本文将详细介绍如何配置Seata服务端,帮助初学者快速上手。

1. Seata服务端简介

Seata服务端(TC,Transaction Coordinator)是Seata的核心组件,负责协调分布式事务的提交和回滚。它通过维护全局事务的状态,确保所有参与者在事务执行过程中保持一致。

2. Seata服务端配置文件

Seata服务端的配置文件通常位于 conf 目录下,主要包含以下几个文件:

  • file.conf:存储模式配置
  • registry.conf:注册中心配置
  • nacos-config.txt:Nacos配置(如果使用Nacos作为配置中心)

2.1 file.conf 配置

file.conf 文件用于配置Seata服务端的存储模式。Seata支持多种存储模式,包括文件存储、数据库存储和Redis存储。

plaintext
## 事务日志存储模式
store {
## 存储模式,可选值:file、db、redis
mode = "file"

## 文件存储模式配置
file {
dir = "sessionStore"
}

## 数据库存储模式配置
db {
datasource = "druid"
dbType = "mysql"
url = "jdbc:mysql://127.0.0.1:3306/seata"
user = "root"
password = "root"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
}

## Redis存储模式配置
redis {
host = "127.0.0.1"
port = "6379"
password = ""
database = "0"
minConn = 1
maxConn = 10
maxTotal = 100
queryLimit = 100
}
}

2.2 registry.conf 配置

registry.conf 文件用于配置Seata服务端的注册中心。Seata支持多种注册中心,包括Nacos、Eureka、Zookeeper等。

plaintext
registry {
## 注册中心类型,可选值:nacos、eureka、zk、redis、consul、etcd3、sofa
type = "nacos"

## Nacos注册中心配置
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
cluster = "default"
}

## Eureka注册中心配置
eureka {
serviceUrl = "http://127.0.0.1:8761/eureka"
application = "seata-server"
weight = "1"
}

## Zookeeper注册中心配置
zk {
serverAddr = "127.0.0.1:2181"
sessionTimeout = 6000
connectTimeout = 2000
}
}

3. 存储模式选择

Seata服务端支持多种存储模式,每种模式适用于不同的场景:

  • 文件存储:适用于单机部署,数据存储在本地文件中。
  • 数据库存储:适用于生产环境,数据存储在关系型数据库中。
  • Redis存储:适用于高并发场景,数据存储在Redis中。
提示

在生产环境中,建议使用数据库存储模式,以确保数据的高可用性和持久性。

4. 高可用配置

为了实现Seata服务端的高可用,可以通过以下方式进行配置:

4.1 多节点部署

将Seata服务端部署在多个节点上,并通过注册中心进行服务发现。这样即使某个节点宕机,其他节点仍可以继续提供服务。

4.2 数据库高可用

如果使用数据库存储模式,可以通过数据库的主从复制或集群来实现高可用。

4.3 Redis高可用

如果使用Redis存储模式,可以通过Redis Sentinel或Redis Cluster来实现高可用。

5. 实际案例

假设我们有一个电商系统,订单服务和库存服务分别部署在不同的微服务中。当用户下单时,需要同时更新订单和库存。我们可以使用Seata来保证这两个操作的原子性。

5.1 配置Seata服务端

首先,我们需要配置Seata服务端,选择数据库存储模式,并配置Nacos作为注册中心。

plaintext
store {
mode = "db"
db {
datasource = "druid"
dbType = "mysql"
url = "jdbc:mysql://127.0.0.1:3306/seata"
user = "root"
password = "root"
minConn = 5
maxConn = 30
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
}
}

registry {
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
cluster = "default"
}
}

5.2 启动Seata服务端

配置完成后,启动Seata服务端。服务端启动后,会自动注册到Nacos中。

bash
sh seata-server.sh

5.3 客户端配置

在订单服务和库存服务的配置文件中,添加Seata客户端的配置。

plaintext
seata {
application-id = "order-service"
tx-service-group = "my_test_tx_group"
service {
vgroup-mapping.my_test_tx_group = "default"
grouplist.default = "127.0.0.1:8091"
}
}

5.4 测试分布式事务

通过下单接口测试分布式事务,确保订单和库存的更新操作要么同时成功,要么同时回滚。

6. 总结

本文详细介绍了Seata服务端的配置方法,包括配置文件详解、存储模式选择以及高可用配置。通过实际案例,展示了Seata在分布式事务中的应用场景。

备注

建议初学者在学习Seata服务端配置时,先从单机部署开始,逐步过渡到高可用配置。

7. 附加资源

8. 练习

  1. 尝试在本地部署Seata服务端,并配置数据库存储模式。
  2. 使用Nacos作为注册中心,配置Seata服务端的高可用。
  3. 编写一个简单的分布式事务案例,测试Seata的功能。