好久没整活了,确实没时间,也没学习啊。简单记录一下springcloud中如何使用seata实现分布式事务。
seata下载地址:https://github.com/seata/seata/releases/tag/v1.4.2
开始进行准备配置工作。
nacos命名空间名为seata 命名空间ID为seata_namespace_001的,然后保存即可
seata解压后,去到seata/seata-server-1.4.2/conf目录,修改registry.conf文件,其他的没用我给删除了,这里填写nacos配置信息,命名空间填写“seata_namespace_001”
然后修改file.conf文件,这里主要填写seata链接的数据库信息
然后找到刚才下载的seata源码里面的config.txt,将该文件复制到seata的根目录下面
主要修改点如下
在下载的Seata源码的seata-1.4.2/script/config-center/nacos目录下找到nacos-config.sh文件
复制到seata根目录下
鼠标右键,执行git bash命令
sh nacos-config.sh -h 127.0.0.1 -p 8848 -g SEATA_GROUP -t seata_namespace_001 -u nacos -w nacos
执行成功后如下,nacos里面可以显示这些信息
数据库里面创建数据库,数据库脚本seata-1.4.2/script/server/db目录
启动seata服务:seata-server.bat -p 8091 -h 127.0.0.1 -m db
项目整合seata,要整合的服务数据库里面创建该表信息
CREATE TABLE IF NOT EXISTS `undo_log`
(
`branch_id` BIGINT NOT NULL COMMENT 'branch transaction id',
`xid` VARCHAR(128) 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(6) NOT NULL COMMENT 'create datetime',
`log_modified` DATETIME(6) NOT NULL COMMENT 'modify datetime',
UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
服务里面都添加该依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
我这里有个user服务,point服务
user服务配置文件新增
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
alibaba:
seata:
tx-service-group: server-user-tx_group
seata:
application-id: user
service:
vgroup-mapping:
server-product-tx_group: default
registry:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
group: SEATA_GROUP
namespace: seata_namespace_001
application: seata-server
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
group: SEATA_GROUP
namespace: seata_namespace_001
point服务配置文件
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
alibaba:
seata:
tx-service-group: server-point-tx_group
seata:
application-id: point
service:
vgroup-mapping:
server-order-tx_group: default
registry:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
group: SEATA_GROUP
namespace: seata_namespace_001
application: seata-server
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
group: SEATA_GROUP
namespace: seata_namespace_001
方法添加注解@GlobalTransactional
控制台打印日志,有提示回滚信息Rollbacked。查看数据库,没有存入任何数据
完事了