分布式事务seata实践-AT模式:
[官方对于AT模式的解释](https://seata.io/zh-cn/docs/dev/mode/at-mode.html)
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:
提交异步化,非常快速地完成。
回滚通过一阶段的回滚日志进行反向补偿。
个人理解:从实际demo代码来看同时增加了 @GlobalTransactional、@Transactional 注解,即使去掉@Transactional 也不影响事务的执行。GlobalTransactional掌管了全局事务的提交和回滚。
nacos搭建:
使用版本 2.1.2,支持注册中心和配置中心。可以使用其config功能,不过功能比较其他配置中心繁琐。
seata搭建:
使用版本 1.5.2,支持AT模式,支持框架日志数据存储到Redis。
实际应用场景:
- 搭建nacos,去官网下载,执行脚本startup.sh即可启动,访问8848端口使用web服务,用户密码同nacos。
- 搭建seata server端,官网下载,修改其application.yml文件使其注册到nacos。
- 业务场景测试,事务开始 ------> 创建订单-----> 进销存扣库存--------> 事务完成。
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的注册中心类型和注册中心的信息,主要参考 application.example.yml,官方文档比较繁琐,不容易懂。
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: file
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa,file
type: nacos
server-addr: 127.0.0.1:8848
namespace:
group: SEATA_GROUP
store:
# support: file 、 db 、 redis
mode: file
# 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
此处修改seata的注册中心类型和注册中心的信息,主要参考 application.example.yml,官方的文档描述不是很清楚。
伪代码:
总结:
国产的开源框架越来越趋于简单配置、开箱即用,这是一个很好的迹象。说明国内的IT事业发展的水平越来越高。nacos和seata远不止博文这么点功能。需要更多的探索发现。