seata+eureka使用
微服务间调用如何保证事务
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使用相关推荐
- 初学阿里分布式事务seata分享
框架使用的是nacons+seata Eureka官宣2.x版本不再开源,因此学习了nacos,顺便也讲一下nacos. nacos的下载地址: https://github.com/alibaba/ ...
- eureka server配置_springcloud+eureka整合分布式事务中间件seata
今天继续给大家分享一下阿里的分布式事务中间件seata的使用,跟上篇文章<springboot多数据源整合分布式事务中间件seata>不一样的是,上篇文章是单服务绑定多数据源的分布式情况, ...
- Spring Cloud Eureka整合 Seata 实现分布式事务
一.Seata 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的 ...
- SpringCloud学习之:eureka整合seata
前提:准备一个eureka项目 下面都是在eureka项目的基础上做的整合 步骤1:下载安装seata-server客户端 1.1.下载seata客户端并解压 Git官方下载地址:https://gi ...
- 【实践篇】SpringCloud + Eureka + Mybatis plus 整合分布式事务Seata
纵观全文 项目简介 配置Seata Server服务 修改conf下的registry.conf文件 修改conf下的file.conf文件 启动seata server服务 在系统服务中配置使用Se ...
- GitHub标星14000+,阿里开源的SEATA如何应用到极致?
作者简介:袁鸣凯,家乐福技术总监, 高知特有限技术公司中国区架构师,HP上海研发技术专家,夸客金融首席架构师,现任家乐福中国区技术总监.多年互联网.企业级SOA.微服务.全渠道中台方面的架构设计实战经 ...
- 五分钟体验分布式事务框架Seata
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单 ...
- druid seata 配置_分布式事务解决方案——Seata使用
在微服务开发过程中分布式事务一直是一个比较重要的问题,之前对于分布式事务的解决方法一般会通过MQ的最终一致性来解决,尤其是RocketMQ的事务消息,感兴趣的可以看Spring Boot整合Rocke ...
- 对比 5 种分布式事务方案,还是宠幸了阿里的 Seata(原理 + 实战)
本来不知道写点啥,正好手头有个新项目试着用阿里的 Seata 中间件做分布式事务,那就做一个实践分享吧! 介绍 Seata 之前在简单回顾一下分布式事务的基本概念. 分布式事务的产生 我们先看看百度上 ...
最新文章
- BootStrap 效果展示
- python的6种基本数据类型--字典
- 利用 python 的 http.server 包快速搭建web server 服务
- 操作系统中的一些基本概念
- mt4交易软件云服务器_MT4软件使用教程1常见货币对交易图表类型
- php删除提示信息,php删除一条记录(删除确认提示)
- php基础--变量及作用域
- sqlserver数据库修复
- Ribbon 和 wowza 的集成开发
- diskgenius做win10系统迁移
- 1.Modbus通信协议-什么是Modbus?
- Office EXCEL 创建图片超链接打不开怎么办 Excel打开图片提示发生了意外错误怎么办
- H3C交换机机框首次启动报错“The device (FFFFFFFF-40) doesn‘t support this kind of board.”
- 人工智能行业每日必读(2020年1月14日)
- mysql 查询结果取别名_mysql合并查询结果及为表和字段取别名
- 垃圾小白羊leetcode刷题记录1
- socket中的TCP编程(调用免费聊天的机器人实现自动回复)
- python seek函数whence_file.seek(offset[, whence])
- PCB 设计技巧一百问
- 芝法酱躺平攻略(5)—— SpringBoot编写公主连结公会战报刀工具