微服务间调用如何保证事务

1.下载安装包
https://github.com/seata/seata/releases/tag/v1.4.2
windows 选 seata-server-1.4.2.zip2.解压,编辑 X:\seata\seata\seata-server-1.4.2\conf\registry.conf.conf 文件注册中心是啥 type 就写啥

3.编辑 X:\seata\seata\seata-server-1.4.2\conf\file.conf 文件

启动: bin/seata-server.bat
打开eureka,发现已经注册上去了
4.不同的服务对应的库都加上这3个表SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for global_table
-- ----------------------------#全局事务表
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`status` tinyint(4) NOT NULL,`application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`timeout` int(11) NULL DEFAULT NULL,`begin_time` bigint(20) NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime(0) NULL DEFAULT NULL,`gmt_modified` datetime(0) NULL DEFAULT NULL,PRIMARY KEY (`xid`) USING BTREE,INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;#分支事务表
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (`branch_id` bigint(20) NOT NULL,`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`status` tinyint(4) NULL DEFAULT NULL,`client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime(6) NULL DEFAULT NULL,`gmt_modified` datetime(6) NULL DEFAULT NULL,PRIMARY KEY (`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;#锁表
DROP TABLE IF EXISTS `lock_table`;
CREATE TABLE `lock_table`  (`row_key` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`xid` varchar(96) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`branch_id` bigint(20) NOT NULL,`resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`pk` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime(0) NULL DEFAULT NULL,`gmt_modified` datetime(0) NULL DEFAULT NULL,PRIMARY KEY (`row_key`) USING BTREE,INDEX `idx_branch_id`(`branch_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
5.服务调用者 和 被调用者 pom 加上<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2021.1</version></dependency>6. 同样调用和被调用都加上ymlseata:enabled: trueapplication-id: ${spring.application.name}tx-service-group: seata-serverenable-auto-data-source-proxy: trueservice:default: 127.0.0.1:8091vgroup-mapping:seata-server: defaultconfig:type: filefile:name: file.confregistry:type: filefile:name: file
7.在service 加上
@GlobalTransactional(name = "seata-server", rollbackFor = Exception.class)
即可实现分布式事务!!!
8.代码展示服务提供者Order@RestController
@RequestMapping("/product")
public class ProductController {@Resourceprivate OrderService orderService;@PostMapping("/addOrder" )public void addOrder(@RequestBody Order order){orderService.addOrder(order);}
}
消费者服务Rpc===========》
@Component
@FeignClient(value = "ORDER-PRODUCT")
public interface OrderFeign {@RequestMapping(value ="/product/addOrder", method = RequestMethod.POST)public void addOrder(@RequestBody Order order);}
消费者服务Controller===========》
@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/addOrder" )public void addOrder(@RequestBody Order order){userService.addUser(new User().setUserName("阿毛"),order);}
}
消费者服务service===========》
public interface UserService extends IService<User> {void addUser(User user, Order order);
}
消费者服务serviceImpl===========》
/*** Created with IntelliJ IDEA*/
@Service
@GlobalTransactional(name = "seata-server", rollbackFor = Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Resourceprivate OrderFeign orderFeign;@Override@Transactional(rollbackFor = Exception.class)public void addUser(User user, Order order) {//@Transactional(rollbackFor = Exception.class) 因为是调用其他服务的接口,事务在这里就失效了orderFeign.addOrder(order);if(true){throw new RuntimeException("报错了!");}baseMapper.insert(user);}
}

seata+eureka使用相关推荐

  1. 初学阿里分布式事务seata分享

    框架使用的是nacons+seata Eureka官宣2.x版本不再开源,因此学习了nacos,顺便也讲一下nacos. nacos的下载地址: https://github.com/alibaba/ ...

  2. eureka server配置_springcloud+eureka整合分布式事务中间件seata

    今天继续给大家分享一下阿里的分布式事务中间件seata的使用,跟上篇文章<springboot多数据源整合分布式事务中间件seata>不一样的是,上篇文章是单服务绑定多数据源的分布式情况, ...

  3. Spring Cloud Eureka整合 Seata 实现分布式事务

    一.Seata 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的 ...

  4. SpringCloud学习之:eureka整合seata

    前提:准备一个eureka项目 下面都是在eureka项目的基础上做的整合 步骤1:下载安装seata-server客户端 1.1.下载seata客户端并解压 Git官方下载地址:https://gi ...

  5. 【实践篇】SpringCloud + Eureka + Mybatis plus 整合分布式事务Seata

    纵观全文 项目简介 配置Seata Server服务 修改conf下的registry.conf文件 修改conf下的file.conf文件 启动seata server服务 在系统服务中配置使用Se ...

  6. GitHub标星14000+,阿里开源的SEATA如何应用到极致?

    作者简介:袁鸣凯,家乐福技术总监, 高知特有限技术公司中国区架构师,HP上海研发技术专家,夸客金融首席架构师,现任家乐福中国区技术总监.多年互联网.企业级SOA.微服务.全渠道中台方面的架构设计实战经 ...

  7. 五分钟体验分布式事务框架Seata

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单 ...

  8. druid seata 配置_分布式事务解决方案——Seata使用

    在微服务开发过程中分布式事务一直是一个比较重要的问题,之前对于分布式事务的解决方法一般会通过MQ的最终一致性来解决,尤其是RocketMQ的事务消息,感兴趣的可以看Spring Boot整合Rocke ...

  9. 对比 5 种分布式事务方案,还是宠幸了阿里的 Seata(原理 + 实战)

    本来不知道写点啥,正好手头有个新项目试着用阿里的 Seata 中间件做分布式事务,那就做一个实践分享吧! 介绍 Seata 之前在简单回顾一下分布式事务的基本概念. 分布式事务的产生 我们先看看百度上 ...

最新文章

  1. BootStrap 效果展示
  2. python的6种基本数据类型--字典
  3. 利用 python 的 http.server 包快速搭建web server 服务
  4. 操作系统中的一些基本概念
  5. mt4交易软件云服务器_MT4软件使用教程1常见货币对交易图表类型
  6. php删除提示信息,php删除一条记录(删除确认提示)
  7. php基础--变量及作用域
  8. sqlserver数据库修复
  9. Ribbon 和 wowza 的集成开发
  10. diskgenius做win10系统迁移
  11. 1.Modbus通信协议-什么是Modbus?
  12. Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
  13. H3C交换机机框首次启动报错“The device (FFFFFFFF-40) doesn‘t support this kind of board.”
  14. 人工智能行业每日必读(2020年1月14日)
  15. mysql 查询结果取别名_mysql合并查询结果及为表和字段取别名
  16. 垃圾小白羊leetcode刷题记录1
  17. socket中的TCP编程(调用免费聊天的机器人实现自动回复)
  18. python seek函数whence_file.seek(offset[, whence])
  19. PCB 设计技巧一百问
  20. 芝法酱躺平攻略(5)—— SpringBoot编写公主连结公会战报刀工具

热门文章

  1. Houdini烟雾和灯光
  2. 用C++实现线性回归方程的算法
  3. 第三方登录→百度第三方登录
  4. 简单的时间轴HTML源码 可记录网站的成长过程
  5. 必须掌握sprintf函数的用法
  6. c/c++算法竞赛入门经典第一版刘汝佳第五,六章课后习题
  7. Xcode报错:No such module SwiftyJSON
  8. c语言实现求二叉树叶子结点个数
  9. Python递归遍历文件夹下所有文件
  10. 机器学习-Deconvolution在生物信息学中的应用(对血液以及淋巴细胞进行亚群的预测和分类)...