二、Spring Cloud Alibaba 注册中心 Nacos 搭建
三、Spring Cloud Alibaba 和Spring Boot、Spring Cloud 版本依赖关系
四、如何搭建 Spring Cloud Alibaba 服务提供者?
五、如何搭建 Spring Cloud Alibaba 服务消费者?
七、Spring Cloud Alibaba 集成 OpenFeign
八、Spring Cloud Alibaba 使用 Nacos + Seata 实现 AT 分布式事务(只讲实现,不讲具体的原理)
具体原理可以参考官方文档
注意:seata 配置 比较繁琐,请按照以下步骤配置,如遇问题可以留言。
1、安装 Seata
2、打开 Seata conf 目录配置Nacos支持
2.1 修改 registry.conf
registry {
type = "nacos" # 修改成nacos
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
config {
type = "nacos" # 修改成nacos
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
}
}
3、下载Seata 脚本支持,建议直接把项目下载下来
3.1 在每个业务数据库中插入一个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`
(
`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';
4、初始化配置到Nacos
4.1 本文采用的是At事务模式,所以 seata-develop\seata-develop\script\config-center\config.txt 不用修改;其他模式则需要修改 文章高亮部分
4.2 启动Nacos后,使用命令初始化config.txt配置到nacos
进入 seata-develop\seata-develop\script\config-center\nacos
目录 打开命令行工具git 输入命令
sh nacos-config.sh config.txt
执行后打开nacos客户端会发现刚刚的配置已经初始化进来了
5、添加maven依赖
<!--seata-->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
6、yml 配置seata
seata:
service:
vgroup-mapping:
my_test_tx_group: default #请注意!这个key my_test_tx_group 为config.txt中配置的 Data Id 尾巴
tx-service-group: my_test_tx_group #请注意!这个value 为config.txt中配置的 Data Id 尾巴
config:
type: nacos
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group : "SEATA_GROUP"
namespace: ""
cluster: "default"
username: "nacos"
password: "nacos"
此处呼应上面提到的 my_test_tx_group
7、使用@GlobalTransactional() 添加 事务
@GlobalTransactional()
@GetMapping("/user/update")
public void userUpdate() {
testDao.insertUser();
userClient.updateUser();
}
8、测试结果我就不放出来了,没啥意义,欢迎大家留言。