Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
本文使用的测试用例是springboot+dubbo整合seata1.1版本,如果您使用的是springcloud请把文中与视频所说的seata-spring-boot-starter版本切换为spring-cloud-alibaba-seata 2.2.0(目前仅支持1.0的seata)版本即可.
特性:
首先我们用到的是Seata的AT模式,该模式的特点就是对业务无入侵式,分二阶段提交.
一阶段: 业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段: 提交异步化,非常快速.回滚通过一阶段的回滚日志进行反向补偿
更多介绍请访问:seata.io
正文:
第一步:
首先访问:https://seata.io/zh-cn/blog/download.html
下载我们需要使用的seata服务并启动.
第二步:
在你的数据库中加入undo_log这张表
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'increment id',
`branch_id` BIGINT(20) NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(100) NOT NULL COMMENT 'global transaction id',
`context` VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
`rollback_info` LONGBLOB NOT NULL COMMENT 'rollback info',
`log_status` INT(11) NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` DATETIME NOT NULL COMMENT 'create datetime',
`log_modified` DATETIME NOT NULL COMMENT 'modify datetime',
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
第三步:
在你的项目中引入seata依赖(注:1.1.0版本目前需通过oss远程仓库发布,等正式版发布即可直接使用,或者可通过拉取1.1.0的源码进行本地打包使用.)
oss远程仓库:
https://oss.sonatype.org/index.html#view-repositories;snapshots~browsestorage~seata
io.seata
seata-spring-boot-starter
1.1.0
并在你参与其中的项目的application.yml中都加入如下配置(视频内容不方便修改,在配置上请参考图文内容)
seata:
enabled: true
application-id: test #可自定义
tx-service-group: my_test_tx_group #可自定义
# enable-auto-data-source-proxy: true
# use-jdk-proxy: false
service:
vgroup-mapping:
my_test_tx_group: default
grouplist:
default: 127.0.0.1:8091
# disable-global-transaction: false
config:
type: file
file:
name: file.conf
registry:
type: file
application.properties参考如下:
seata.enabled=true
seata.application-id=test
seata.tx-service-group=my_test_tx_group
# seata.enable-auto-data-source-proxy=true
# seata.use-jdk-proxy=false
seata.service.vgroup-mapping.my_test_tx_group=default
seata.service.grouplist.default=127.0.0.1:8091
seata.service.enable-degrade=false
# seata.service.disable-global-transaction=false
seata.config.type=file
seata.config.file.name=file.conf
seata.registry.type=file
注:starter1.1.0的自动代理支持属性配置和注解@EnableAutoDataSourceProxy两种方式
第四步:
在您的发起者的接口上加入@GlobalTransactional,并查看server日志以及程序日志进行调试即可.