目录
一、分布式问题
二、Seate简介
(一)官网
(二)Seate分布式事务的过程
(三) 分布式事务处理过程
(四)下载地址
三、Seata-Server安装
(一)官网
(二)下载版本
(三)修改配置
(四)启动
一、分布式问题
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,
业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。
总结:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题
二、Seate简介
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
(一)官网
Seata
(二)Seate分布式事务的过程
分布式事务处理过程的一ID+三组件模型
一ID:Transaction ID XID 全局唯一的事务ID
三组件:
(三) 分布式事务处理过程
- TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;
- XID 在微服务调用链路的上下文中传播;
- RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;
- TM 向 TC 发起针对 XID 的全局提交或回滚决议;
- TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
(四)下载地址
Releases · seata/seata · GitHub
对于本地的事务我们有@Transactional
Seata为我们提供了全局事务注解@GlobalTransactional
三、Seata-Server安装
(一)官网
Seata
(二)下载版本
Releases · seata/seata (github.com)
(三)修改配置
先备份原始application.yml文件, 修改seata-server-1.5.2\seata\conf\application.yml,改为结合nacos和mysql
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/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:
service:
vgroupMapping:
fsp_tx_group: default
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: http://127.0.0.1:8848
# namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
namespace:
group: SEATA_GROUP
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa
type: nacos
preferred-networks: 30.240.*
nacos:
application: seata-server
server-addr: http://127.0.0.1:8848
group: SEATA_GROUP
namespace:
# namespace: 7392baed-d98b-48a4-8676-34e1b38eade6
cluster: default
username:
password:
##if use MSE Nacos with auth, mutex with username/password attribute
#access-key: ""
#secret-key: ""
store:
# support: file 、 db 、 redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/seata?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true&rewriteBatchedStatements=true
user: root
password: 123456
# server:
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
mysql5.7数据库新建库seata,建表文件在seata-server-1.5.2\seata\script\server\db\mysql.sql ,复制到mysql选择seata库运行即可
(四)启动
可直接点击seata-server-1.5.2\seata\bin\seata-server.bat, 也可打开命令行窗口运行,出现错误可以查看报错
进入nacos查看