上一篇搭建了seata服务,既然搭建好了,那我们肯定得搭建一个服务来实践一下
已经搭建了dubbo+nacos哦。如果有问题的人多的话,评论告诉我,我就再写几篇搭建的前置文章吧。
目录
说明
前置
开始配置吧
一、seata服务IP设置
二、服务POM依赖
三、application.yml配置(重点、细致)
四、代码
1、sample_front
开启事务
没有事务
2、sample_service
ctlService
五、undo_log
六、测试
上一篇启动seata的时候没有设置SEATA_IP,可能会导致FrameworkException: No available service异常,那是因为docker搭建的seata IP用的是容器里面的,那我们得设置这个IP,删除原来的容器
docker stop seata
docker rm seata
启动一个新的,记得把YOUR_IP替换成你服务器真的IP哦~
docker run -d --restart always --name seata -p 8091:8091 -p 7091:7091 -v /usr/local/docker/seata/seata-server/:/seata-server -e SEATA_PORT=8091 -e SEATA_IP=YOUR_IP seataio/seata-server
加入已经搭建了服务sample_front,sample_service1来实践seata,依赖seata,两个服务都做
io.seata
seata-spring-boot-starter
seata:
application-id: sample-front (用你的服务名称吧)
tx-service-group: default_tx_group(可以自己定义)
service:
vgroup-mapping:
default_tx_group: default(和tx_service_group一致哦,后面的值就是seataserver服务的cluster!!!)
registry:
type: nacos
nacos:
server-addr: XXXX:8848 (seataserver的nacos)
group: SEATA_GROUP(seataserver的group)
username: xxxx(nacos的用户名)
password: xxxxx(nacos的密码)
@RequestMapping(value = "rollback", method = RequestMethod.GET)
@GlobalTransactional
public String rollback() throws Exception {
ctlService.rollback();
ctlService.error();
return "update ok?";
}
@RequestMapping(value = "norollback", method = RequestMethod.GET)
public String norollback() throws Exception {
ctlService.rollback();
ctlService.error();
return "update ok?";
}
public String rollback() {
User user = userService.getById(1L);
user.setICount(user.getICount() + 1);
userService.updateById(user);
return "update ok";
}
sample_servce连接的数据库新建一张表
CREATE TABLE `undo_log`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
访问http://localhost:port/servicectl/rollback ,发现i_count没有增加
访问http://localhost:port/servicectl/norollback ,发现i_count每次增加1
seata回滚生效!!!