【2.2 分布式事务(Seata)】一文介绍分布式事务入门知识和Seata框架
分布式事务seata-v2.0集群部署:
由于apache官方文档对于seata的使用说明,尤其是对于新手,使用非常不友好,文档的步骤是错乱的,要整体有个了解之后,才能较快的进行部署,所以在此记录下部署的过程和注意事项
主要步骤:
一、部署nacos:
从nacos官网下载2.3.0版本的软件包
启动nacos
二、部署seata服务端
下载seata 2.0.0链接: link
创建seata服务端数据库,数据库脚本:seata/script/server/db,我用的mysql
修改配置文件 seata/conf/application.yml。注释说明要看
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: localhost:8848 #nacos的地址
namespace:
group: DEFAULT_GROUP
username:
password:
data-id: seataServer.properties #配置文件,后续要在nacos中添加nacos-server的配置信息,如数据连接,这个就是nacos配置的文件名称
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server #注册到nacos的服务名称,后续客户端配置服务端的时候,就要是这个名称
server-addr: localhost:8848
group: SEATA_GROUP #seata客户端配置的分组要和这个名称一致
namespace:
# tc集群名称
cluster: default #集群名称,下面注释的两行为客户端的配置,放到这里是为了方便对比。第一行为事务组的名称,第二行为客户端集群名称,要和这个一致。注意group001,第一行value和第二行的key是一致的
#seata.tx-service-group=group001
#seata.service.vgroup-mapping.group001=default
username:
password:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
nacos上创建配置 ,data-id,group对应配置文件上的配置
7. 添加配置内容,来自官网,docker-compose部署部分。实际上这是通用的配置,但是官方放到了docker里面,所以很乱。只需修改数据库配置即可
store.mode=db
#-----db-----
store.db.datasource=druid
store.db.dbType=mysql
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://10.82.16.197:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user= root
store.db.password=root
# 数据库初始连接数
store.db.minConn=1
# 数据库最大连接数
store.db.maxConn=20
# 获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
# 全局事务表名 默认global_table
store.db.globalTable=global_table
# 分支事务表名 默认branch_table
store.db.branchTable=branch_table
# 全局锁表名 默认lock_table
store.db.lockTable=lock_table
# 查询全局事务一次的最大条数 默认100
store.db.queryLimit=100
# undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
server.undo.logSaveDays=7
# undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000
# 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
# 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
# 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
server.maxCommitRetryTimeout=-1
# 二阶段回滚重试超时时长
server.maxRollbackRetryTimeout=-1
# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
# 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
# 二阶段回滚状态重试回滚线程间隔时间 默认1000,单位毫秒
server.recovery.rollbackingRetryPeriod=1000
# 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
启动seata服务端。执行seata-server.sh的时候,要加上–host参数,为机器的ip地址,也就是注册到nacos上的服务的ip。否则ip地址神都不知道是什么,和客户端的网络不通
到此,nacos上可以看到seata服务,是seata服务端的服务。如果高可用,多太服务器copy下,启动多个服务即可
三、部署客户端,springboot应用
创建springboot,导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2022.0.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
在微服务所在的库创建表,undo_log,建表语句见官网。全局事务涉及的所有的库,都需要undo_log
application.properties添加配置
spring.application.name=demoApp
seata.registry.type=nacos
seata.registry.nacos.server-addr=10.82.26.161:8848
seata.registry.nacos.group=SEATA_GROUP
seata.tx-service-group=group001
seata.service.vgroup-mapping.group001=default #这个就是服务端配置的集群名称
spring.cloud.nacos.server-addr=10.82.26.161:8848
#后面两个不涉及seata
spring.config.import=nacos:application.yml?refresh=true
spring.cloud.compatibility-verifier.enabled=false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
启动服务,会在seata服务端控制台看到日志,显示RM注册 了
启动2个微服务,配置feign调用,在第一服务的方法上(这个服务调用了第二个服务),添加 @GlobalTransactional,即可启用全局事务控制AT模式
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/brotherhuang/article/details/136389823