首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 是什么推动了单体应用到微服务架构的演进?
02 | 微服务全家桶:走进 Spring Cloud 的世界
03 | 初窥门径:我们要搭建一个怎样的微服务实战项目?
04 | 十八般兵器:如何搭建项目所需的开发环境?
05 | 牛刀小试:如何搭建优惠券模板服务?
06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
07 | Nacos体系架构:什么是服务治理?
08 | 服务治理:Nacos集群环境搭建
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
10 | 集成 Nacos:如何通过服务发现机制向服务提供者发起调用?
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
12 | OpenFeign:服务间调用组件 OpenFeign 是怎么“隔空取物”的?
13 | OpenFeign 实战:如何实现服务间调用功能?
14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
15 | 配置中心在微服务中发挥着怎样的作用?
16 | 如何集成 Nacos Config 实现配置项动态刷新?
17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?
18 | Sentinel 实战:如何实施流量整形与限流策略?
19 | Sentinel 实战:如何为项目添加异常降级方案?
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
21 | Sleuth 体系架构:为什么微服务架构需要链路追踪?
22 | 调用链追踪:集成 Sleuth 和 Zipkin,实现链路打标
23 | 调用链追踪:如何通过 ELK 实现日志检索?
24 | 为什么微服务架构少不了微服务网关?
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
26 | 微服务网关:如何设置请求转发、跨域和限流规则?
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
28 | 消息驱动:谁说消息队列只能削峰填谷?
29 | 消息驱动:如何集成 Stream 实现消息驱动?
30 | 消息驱动:如何高效处理 Stream 中的异常?
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
32 | Alibaba Seata 框架:什么是分布式事务?
33 | 分布式事务:搭建 Seata 服务器
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
36 | 说透微服务 | 什么是主链路规划?
当前位置:
首页>>
技术小册>>
Spring Cloud微服务项目实战
小册名称:Spring Cloud微服务项目实战
### 33 | 分布式事务:搭建 Seata 服务器 在微服务架构中,服务间的交互频繁且复杂,这带来了数据一致性的挑战。传统的单体应用事务管理机制在分布式系统中往往不再适用,因为跨多个服务的操作需要一种更为灵活和强大的事务管理机制。Seata(Simple Extensible Autonomous Transaction Architecture)便是在这样的背景下应运而生,它提供了一套高性能、易于使用的分布式事务解决方案,旨在帮助开发者简化分布式事务的管理。本章将详细介绍如何搭建Seata服务器,为后续的分布式事务管理奠定基础。 #### 一、Seata简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。它实现了标准的两阶段提交协议(2PC),并在此基础上做了大量优化,以应对微服务架构下的高并发、低延迟等挑战。Seata 的核心优势包括: - **高性能**:通过异步化、并行化等技术手段,提升事务处理性能。 - **简单易用**:提供简洁的API和配置方式,降低开发难度。 - **灵活扩展**:支持多种事务模式,如AT(Automatic Transaction)、TCC(Try-Confirm-Cancel)、SAGA等,满足不同场景需求。 #### 二、搭建环境准备 在搭建Seata服务器之前,需要准备以下环境: - **JDK**:推荐使用JDK 1.8及以上版本。 - **Maven**:用于构建和管理项目依赖。 - **Git**:用于克隆Seata的源代码(如果需要)。 - **数据库**:用于存储Seata的事务日志和配置信息,可以选择MySQL、PostgreSQL等关系型数据库。 - **服务器**:可以是物理机或虚拟机,确保有足够的资源运行Seata服务。 #### 三、下载并配置Seata 1. **下载Seata** 可以从Seata的官方GitHub仓库下载最新版本的Seata源代码,或者使用Maven直接引入Seata的依赖到你的项目中(但本章节主要聚焦于搭建独立的Seata服务器)。 ```bash git clone https://github.com/seata/seata.git cd seata ``` 2. **配置数据库** Seata需要数据库来存储事务日志和配置信息。首先,需要在数据库中创建相应的表结构。Seata提供了SQL脚本(位于`script/server/db/`目录下),你可以根据自己的数据库类型选择合适的脚本执行。 以MySQL为例,执行以下命令: ```bash mysql -u root -p # 在MySQL命令行中 CREATE DATABASE seata; USE seata; SOURCE /path/to/seata/script/server/db/mysql/seata-server.sql; ``` 替换`/path/to/seata`为你的Seata源代码路径。 3. **配置Seata服务器** 编辑`conf/registry.conf`和`conf/file.conf`文件以配置Seata服务器的注册中心、配置中心和事务日志存储等。 - **registry.conf**:配置注册中心和配置中心的地址。常见的注册中心有Nacos、Eureka等,配置中心可以使用Nacos Config、Apollo等。 ```properties registry { type = "nacos" nacos { serverAddr = "127.0.0.1:8848" namespace = "" cluster = "default" } } config { type = "nacos" nacos { serverAddr = "127.0.0.1:8848" namespace = "" group = "SEATA_GROUP" } } ``` - **file.conf**:配置事务日志存储的数据库连接信息、服务分组等。 ```properties service { # 事务服务组 vgroupMapping.my_test_tx_group = "default" # 禁用全局事务 disableGlobalTransaction = false } store { ## store mode: file、db mode = "db" db { ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/HikariDataSource(hikari)/BasicDataSource(dbcp) etc. datasource = "druid" ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata" username = "root" password = "your_password" ## connection init size initialSize = 5 ## connection max active maxActive = 10 ## connection max wait maxWait = 10000 ## connection min idle minIdle = 2 ## whether pool prepared statement poolPreparedStatements = true ## max pool prepared statement per connection size maxPoolPreparedStatementPerConnectionSize = 20 ## after how long time, the idle connections will be tested testWhileIdle = true ## after how long time, the connection will be tested when borrowed from pool testOnBorrow = false ## after how long time, the connection will be tested when returned to pool testOnReturn = false ## sql to validate connections from pool before returning to client validationQuery = "SELECT 1" ## specify the class name of the query validator queryValidatorClassName = "io.seata.common.util.DefaultQueryValidator" ## specify the class name of the transaction query validator transactionQueryValidatorClassName = "io.seata.common.util.DefaultTransactionQueryValidator" } } ``` #### 四、启动Seata服务器 1. **编译Seata** 如果你从GitHub上下载了Seata的源代码,需要先编译它。在Seata的根目录下执行Maven命令: ```bash mvn -Prelease-all clean install -DskipTests=true ``` 这会编译所有模块,并打包成可执行文件。 2. **启动Server** 编译完成后,进入`seata/server/seata-server/target`目录,找到`seata-server.jar`文件。使用Java命令启动Seata服务器: ```bash java -jar seata-server.jar -p 8091 ``` 其中`-p 8091`指定了Seata服务器的端口号,你可以根据需要修改它。 #### 五、验证与调试 启动Seata服务器后,可以通过访问其提供的监控页面(如果配置了相应的服务)或使用日志输出验证服务是否正常运行。此外,还可以编写一个简单的微服务应用来测试Seata的分布式事务功能,确保配置正确且Seata服务器能够正确处理分布式事务。 #### 六、结论 本章详细介绍了如何搭建Seata服务器,包括环境准备、Seata的下载与配置、服务器的启动等步骤。通过搭建Seata服务器,可以为微服务架构下的应用提供强大且灵活的分布式事务支持,确保数据的一致性和完整性。在后续章节中,我们将进一步探讨如何在微服务项目中集成和使用Seata来处理分布式事务。
上一篇:
32 | Alibaba Seata 框架:什么是分布式事务?
下一篇:
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
该分类下的相关小册推荐:
Java语言基础6-面向对象高级
Java语言基础7-Java中的异常
Java必知必会-Maven初级
Java语言基础8-Java多线程
手把手带你学习SpringBoot-零基础到实战
Java必知必会-Maven高级
SpringBoot零基础到实战
Java语言基础3-流程控制
Java语言基础9-常用API和常见算法
Java性能调优实战
Java并发编程实战
Java必知必会-JDBC