博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用SpringCloud Alibaba搭建属于自己的微服务(三十七)~基础搭建~alibaba seata客户端(TM和RM)的集成
阅读量:4203 次
发布时间:2019-05-26

本文共 5436 字,大约阅读时间需要 18 分钟。

一.概述

上一个章节已经讲解了seata服务端,也就是seata中TC、TM和RM概念中的TC的部署,本章节讲解seata客户端也就是TM和RM的集成.虽然分TM和RM,但是这是逻辑上的概念,在实质的集成中,TM和RM的集成方式是一样的.以server-user服务和server-pay为例集成.server-user为TM,server-pay为RM.

二.server-user集成seata

1.server-user.pom中加入相关依赖.

com.alibaba.cloud
spring-cloud-alibaba-seata
2.2.0.RELEASE
io.seata
seata-spring-boot-starter
io.seata
seata-spring-boot-starter
1.2.0

2.bootstrap.yml中加入相关配置.

seata:  enabled: true  application-id: ${
spring.application.name} tx-service-group: my_test_tx_group enable-auto-data-source-proxy: true config: type: nacos nacos: namespace: serverAddr: 47.96.131.185:8849 group: SEATA_GROUP userName: "nacos" password: "nacos" registry: type: nacos nacos: application: seata-server #seata服务端(TC)在nacos中的应用名称 server-addr: 47.96.131.185:8849 namespace: userName: "nacos" password: "nacos"

3.user数据库加入表undo_log.

在这里插入图片描述

undo_log表sql脚本的位置:seata资源包路径:seata-1.2.0/script/client/at/db/mysql.sql

三.server-pay集成seata

1.server-pay.pom中加入相关依赖.

com.alibaba.cloud
spring-cloud-alibaba-seata
2.2.0.RELEASE
io.seata
seata-spring-boot-starter
io.seata
seata-spring-boot-starter
1.2.0

2.bootstrap.yml中加入相关配置.

seata:  enabled: true  application-id: ${
spring.application.name} tx-service-group: my_test_tx_group enable-auto-data-source-proxy: true config: type: nacos nacos: namespace: serverAddr: 47.96.131.185:8849 group: SEATA_GROUP userName: "nacos" password: "nacos" registry: type: nacos nacos: application: seata-server #seata服务端(TC)在nacos中的应用名称 server-addr: 47.96.131.185:8849 namespace: userName: "nacos" password: "nacos"

3.pay数据库加入表undo_log.

在这里插入图片描述

undo_log表sql脚本的位置:seata资源包路径:seata-1.2.0/script/client/at/db/mysql.sql

四.测试代码编写

1.server-user服务

(1).SeataTestController
package com.ccm.server.user.controller;import com.ccm.common.exception.result.ResultSet;import com.ccm.server.user.dao.mysql.domain.UserInfo;import com.ccm.server.user.dao.mysql.mapper.TestTableMapper;import com.ccm.server.user.dao.mysql.mapper.UserInfoMapper;import com.ccm.server.user.openfeign.ServerPayFeign;import io.seata.spring.annotation.GlobalTransactional;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @Description seata测试控制层 * @Author ccm * @CreateTime 2020/7/16 21:59 */@Api(tags = "seata测试")@RestController@RequestMapping(value = "seataTest")public class SeataTestController {
@Autowired private UserInfoMapper userInfoMapper; @Autowired private ServerPayFeign serverPayFeign; @GlobalTransactional @ApiOperation(value = "seata分布式事务测试") @GetMapping(value = "test01") public ResultSet test02() {
ResultSet.getFeignData(serverPayFeign.test01()); int i = 1/0; UserInfo userInfo = new UserInfo(); userInfoMapper.insert(userInfo); return ResultSet.success(); }}
(2).ServerPayFeign
package com.ccm.server.user.openfeign;import com.ccm.common.exception.result.ResultSet;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;/** *  @Description 调用server-pay的feign层 *  @Author ccm *  @CreateTime 2020/08/28 9:46 */@FeignClient(name = "server-pay")public interface ServerPayFeign {
@GetMapping(value = "seataTest/test01") ResultSet
test01();}

2.server-pay服务

(1).SeataTestController
package com.ccm.server.pay.controller;import com.ccm.common.exception.result.ResultSet;import com.ccm.server.pay.dao.mysql.domain.PayFlowingWater;import com.ccm.server.pay.dao.mysql.mapper.PayFlowingWaterMapper;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.UUID;/** * @Description seata rm端测试控制层 * @Author ccm * @CreateTime 2020/7/16 21:59 */@Api(tags = "seata rm端测试")@RestController@RequestMapping(value = "seataTest")public class SeataTestController {
@Autowired private PayFlowingWaterMapper payFlowingWaterMapper; @ApiOperation(value = "seata测试") @GetMapping(value = "test01") public ResultSet test01() {
PayFlowingWater payFlowingWater = new PayFlowingWater(); payFlowingWater.setFlowingWaterId(UUID.randomUUID().toString()); payFlowingWaterMapper.insert(payFlowingWater); return ResultSet.success(); }}

3.启动gateway、server-user和server-pay服务

在这里插入图片描述

4.打开gateway的swagger界面

在这里插入图片描述

5.接口测试

在这里插入图片描述在这里插入图片描述

6.查看数据库

可以看到pay数据库的支付流水表并没插入记录,证明分布式事务起到了作用,出现异常,server-pay服务中插入的数据回滚了.

在这里插入图片描述
在这里插入图片描述

您的点赞、收藏、转发和关注是我持续创作的动力!

源码地址:

转载地址:http://futli.baihongyu.com/

你可能感兴趣的文章
linux设置环境变量 临时设置 和 永久设置
查看>>
检查网站在世界各地的打开速度
查看>>
jquery 向上(顶部),向下(底部)滑动
查看>>
seo
查看>>
10个出色的NoSQL数据库
查看>>
MySQL: InnoDB 还是 MyISAM?
查看>>
MySQL性能优化的最佳20+条经验
查看>>
SQL语言的组成部分 ddl dcl dml
查看>>
mysql数据库从库同步延迟的问题
查看>>
1.mysql数据库主从复制部署笔记
查看>>
mysql数据库主从同步的问题解决方法
查看>>
mysql 配置 - on xFanxcy.com
查看>>
MySQL数据库高并发优化配置
查看>>
mysql一: 索引优化
查看>>
测试人员,今天再不懂BDD就晚了!
查看>>
是QA还是AQ?
查看>>
害怕自动化(1)
查看>>
Script and Test Data
查看>>
在ITPub上发表文章《如何进行测试自动化的成本估算》
查看>>
深圳市软件质量提升工程系列活动——安全测试百人大课堂
查看>>