本文视频地址:https://www.bilibili.com/video/BV1U3411s7PK/
1 seata配置
关于下载启动,安装,建表等这块不在这里整理了。这里只描述下怎么导入配置:
https://github.com/seata/seata/tree/develop/script/config-center,官方的最新的配置文件在这个目录的config.txt。
将config.txt拷贝到seata的conf目录下:
在这个目录下建一个nacos的文件夹,并将nacos-config.sh拷贝到这个文件夹,nacos-config.sh从哪里获取,到https://github.com/seata/seata/tree/develop/script/config-center/nacos这个目录下载:
下载下来,路径的相对关系如下:
在有git已经安装的前提下,执行nacos-config.sh,即可将配置导入到nacos。
其他的就是file.conf和registry.conf的配置了,就是seata本身作为一个微服务,它需要配置中心和注册中心,都配置nacos相关的即可。
2 配置改造
看下nacos上应用的配置:
# Tomcat
server:
port: 9303
# Spring
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://rm-8vbqa4stsdfasdfaskso.mysql.zhangbei.rds.aliyuncs.com:3306/ry-qiniu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: dongda
password: 123
# 从库数据源
# slave:
# username:
# password:
# url:
# driver-class-name:
seata: true # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
application:
# 应用名称
name: ruoyi-qiniu
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# seata 服务分组,要与服务端nacos-config.txt中service.vgroup_mapping的后缀对应
alibaba:
seata:
tx-service-group: default_tx_group
# seata配置
seata:
# 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启
enabled: true
# Seata 应用编号,默认为 ${spring.application.name}
application-id: seata-server
# Seata 事务组编号,用于 TC 集群名
tx-service-group: default_tx_group
# 关闭自动代理
enable-auto-data-source-proxy: false
# 服务配置项
service:
# 虚拟组和分组的映射
vgroup-mapping:
default_tx_group: default
grouplist:
default: 127.0.0.1:8091
config:
type: nacos
nacos:
# serverAddr: 127.0.0.1:8848
group: SEATA_GROUP
namespace:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace:
username: nacos
password: nacos
cluster: default
这一块就注意几点:
第一就是开启seata,也就是下面这段,否则数据库是不会被代理的:
第二是分组名称要对应,否则在实现事务的时候会报错:
第三是调用接口时,接口如果有降级处理,事务也不会回滚。
第四是seata的分组配置
问题
seata在两阶段提交时候,因为第一阶段其实就已经完成提交了,如果这个时候,对数据做了修改,再回滚的时候,seata会一直报错。
其他
本篇文章依然是不完善的,见谅见谅。
x1 配置seata的dockerfile文件
x2 补充docker-compose.yml文件
version: "3.8"
services:
ruoyi-seata:
image: seataio/seata-server:latest
hostname: seata-server
ports:
- 8091:8091
environment:
- SEATA_PORT=8091
expose:
- 8091
x3 deploy.sh中增加
docker-compose up -d ruoyi-seata
(由于其他项目赶进度原因,此处未完成,后续补充)
x4 配置
执行完,启动之后默认的注册中心和配置中心都是文件
registry.conf配置nacos的IP,账号和密码。
file.conf配置db
undo_log表
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;