Spring Cloud -【2】
Spring Cloud —seata
Spring Cloud 项目,分布式事务seata集成
本文只针对springcloud环境集成seata
技术版本说明
服务技术介绍
1.springcloud:2021.0.3
2.springboot:2.6.9
3.springcloudAlibaba:2021.0.1.0 【Spring Cloud Alibaba】
4.nacos:2.0.4【nacos官方文档 】=>【github地址】
5.seata:1.5.2 【seata官方文档 】 =>【 github地址】
seata-server
1.下载 seata-server
1> 打开nacos地址
下载任意一个,放到服务器上,解压文件夹
2.nacos配置
1> nacos上创建新的命名空间seata,用于配置seata-server
2> 配置 application.yml
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ./logs/seata
# extend:
# logstash-appender:
# destination: 127.0.0.1:4560
# kafka-appender:
# bootstrap-servers: 127.0.0.1:9092
# topic: logback_to_logstash
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
# nacos ip地址
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: ******
username: nacos
password: nacos
data-id: seata-server.yml
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
nacos:
application: seata-server
# nacos ip地址
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: ******
cluster: default
username: nacos
password: nacos
data-id: seata-server.yml
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
注:
namespace和server-addr属性改成自己的
3> seata配置同步
通过脚本上传配置到Nacos
参考https://github.com/seata/seata/tree/develop/script/config-center 的config.txt并修改,之后运行仓库中提供的nacos脚本,将信息提交到nacos控 制台,如果有需要更改,可直接通过控制台更改.
eg: sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password
同步后
主要的几个配置
存储模式:file、db、redis 支持三种
根据存储模式,配置相关配置
4>seata空间创建seata-server.yml
seata:
enabled: true
tx-service-group: default_tx_group
enableAutoDataSourceProxy: true
#enable-auto-data-source-proxy: true
data-source-proxy-mode: AT
use-jdk-proxy: false
client:
rm:
async-commit-buffer-limit: 10000
report-retry-count: 5
table-meta-check-enable: false
report-success-enable: false
# saga-branch-register-enable: false
# saga-json-parser: jackson
# saga-retry-persist-mode-update: false
# saga-compensate-persist-mode-update: false
# tcc-action-interceptor-order: -2147482648 #Ordered.HIGHEST_PRECEDENCE + 1000
lock:
retry-interval: 10
retry-times: 30
retry-policy-branch-rollback-on-conflict: true
tm:
commit-retry-count: 5
rollback-retry-count: 5
default-global-transaction-timeout: 60000
degrade-check: false
degrade-check-period: 2000
degrade-check-allow-times: 10
interceptor-order: -2147482648 #Ordered.HIGHEST_PRECEDENCE + 1000
undo:
data-validation: true
log-serialization: jackson
log-table: undo_log
only-care-update-columns: true
compress:
enable: true
type: zip
threshold: 64k
load-balance:
type: RandomLoadBalance
virtual-nodes: 10
service:
vgroupMapping:
default_tx_group: default
grouplist:
default: 127.0.0.1:8091
enable-degrade: false
disable-global-transaction: false
transport:
shutdown:
wait: 3
thread-factory:
boss-thread-prefix: NettyBoss
worker-thread-prefix: NettyServerNIOWorker
server-executor-thread-prefix: NettyServerBizHandler
share-boss-worker: false
client-selector-thread-prefix: NettyClientSelector
client-selector-thread-size: 5
client-worker-thread-prefix: NettyClientWorkerThread
worker-thread-size: default
boss-thread-size: 1
type: TCP
server: NIO
heartbeat: true
serialization: seata
compressor: none
enable-client-batch-send-request: true
log:
exception-rate: 100
5>seata空间创建事务组映射关系-(server端)
此配置和 seata-server.yml中的
配置是一样的,放到nacos是方便配置,根据业务需要动态增加
注意:
1. seata-server.yml中,
和
要对应
3.建表
1>seata-server:
如果store用的是db模式,则需要在seata-server链接的数据库创建sql【链接】
按需创建就完事了!!!
2>客户端(应用):
如果data-source-proxy-mode设置的是AT【事务模式介绍】
则需要创建undo_log表【链接】
4.启动
./seata-server.sh -h 127.0.0.1
启动必须带host,是seata-server应用所在机器的ip,否则客户端在回滚时会报错,无法连接到seata-server
io.seata.common.exception.FrameworkException: can not connect to services-server.
客户端(微服务应用)
1.模块配置
抽出模块,方便统一管理,去掉seata旧版本依赖,引入最新依赖
2.nacos客户端配置
客户端连接seata配置,因为业务配置是在dev命名空间,所以重新配置客户端 common-seata-nacos.yml
seata:
enable: true
config:
type: nacos
nacos:
namespace: ******
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
username: "nacos"
password: "nacos"
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group : SEATA_GROUP
namespace: ******
username: "nacos"
password: "nacos"
替换namespace和server-addr即可
同时增加事务组配置,业务应用增加配置
seata:
tx-service-group: default_tx_group
service:
vgroupMapping:
default_tx_group: default
logging:
level:
io:
seata: debug
3.代码
springboot启动类增加注解
@EnableTransactionManagement
方法实现层增加
@GlobalTransactional
举例:

4.启动服务
over!