当前位置:首页 >> 技术栈专业化分层 >> 【SpringCloudAlibaba】Seata分布式事务使用,epson me30

【SpringCloudAlibaba】Seata分布式事务使用,epson me30

cpugpu芯片开发光刻机 技术栈专业化分层 1
文件名:【SpringCloudAlibaba】Seata分布式事务使用,epson me30 【SpringCloudAlibaba】Seata分布式事务使用

文章目录 分布式事务问题示例Seata概述、官网一个典型的分布式事务过程处理过程全局@GlobalTransactional分布式交易解决方案流程图 Seata安装下载修改conf目录下的application.yml配置文件dashboard demo

分布式事务问题示例

单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源, 业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。

Seata概述、官网

官网 http://seata.io/zh-cn/ 下载 https://github.com/seata/seata/releases

一个典型的分布式事务过程

分布式事务处理过程的一ID+三组件模型

Transaction ID XID:全局唯一的事务ID;Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;Transaction Manager ™:控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚; 处理过程 TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;XID 在微服务调用链路的上下文中传播;RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;TM 向 TC 发起针对 XID 的全局提交或回滚决议;TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。 全局@GlobalTransactional

相较于Spring的注解@Transactional

分布式交易解决方案流程图

Seata安装 下载

版本1.7 https://github.com/seata/seata/releases

修改conf目录下的application.yml配置文件 先备份原始application.yml文件主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息(示例参考application.example.yml)建表sql在script/server/db dashboard

http://localhost:7091/ 默认7091端口 切换中文

demo

@GlobalTransactional(name = “fsp-create-order”,rollbackFor = Exception.class) name自己取,唯一就可,rollbackFor异常抛出,

未加该注释出现的问题:示例中 accountService.decrease(order.getUserId(),order.getMoney());调用不成功但是会继续修改订单状态并且会减少账户中值 //Service全都使用Feign可设置Time.Sleep来模拟Feign调用不成功//示例中//@GlobalTransactional(name = "fsp-create-order",rollbackFor = Exception.class)public void create(Order order){log.info("----->开始新建订单");//1 新建订单orderDao.create(order);//2 扣减库存log.info("----->订单微服务开始调用库存,做扣减Count");storageService.decrease(order.getProductId(),order.getCount());log.info("----->订单微服务开始调用库存,做扣减end");//3 扣减账户log.info("----->订单微服务开始调用账户,做扣减Money");accountService.decrease(order.getUserId(),order.getMoney());log.info("----->订单微服务开始调用账户,做扣减end");//4 修改订单状态,从零到1,1代表已经完成log.info("----->修改订单状态开始");orderDao.update(order.getUserId(),0);log.info("----->修改订单状态结束");log.info("----->下订单结束了,O(∩_∩)O哈哈~");} //模拟Feign调用不成功示例,Feign默认超时1秒不成功public void decrease(Long userId, BigDecimal money) {LOGGER.info("------->account-service中扣减账户余额开始");//模拟超时异常,全局事务回滚//暂停几秒钟线程try { TimeUnit.SECONDS.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); }accountDao.decrease(userId,money);LOGGER.info("------->account-service中扣减账户余额结束");}
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接