重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Springcloud中的分布式事务怎么利用seata实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站服务紧随时代发展步伐,进行技术革新和技术进步,经过十年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行成都网站设计、成都网站建设、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
大致上seata分为TC,TM,RM三大构建成整体。它们之间的包含关系如下。即一(xid主键编码,记录信息)带三(TC,TM,RM)
下面之间构建项目进行测试。
1.下载seata并解压,然后改动配置文件。
http://seata.io/zh-cn/blog/download.html官网下载。
解压之后到conf中修改file和registry文件,修改之前一定记得先备份。
file.conf,改动两个地方
将group后面的参数定义一个名字,随意
存储方式选db放在数据库,自然其配置信息根据自己的数据库去填写。
然后是register文件,填写信息将seata注册到nacos中。
启动自然是在bin中打开bat文件即可,注意需要先启动naco。
2.构建项目(order,storage,account)
演示整体的服务调用还有服务报错的时候进入回滚。通过创建订单->检查库存并扣除->检查账户并扣除->修改订单状态
具体代码可查看GitHub
https://github.com/MaTsukun/springcloud2020
关键的service方法
@Service @Slf4j public class OrderServiceImpl implements OrderService{ @Resource private OrderMapper orderMapper; @Resource private StorageService storageService; @Resource private AccountService accountService; @Override @GlobalTransactional(name="abc-create-order",rollbackFor = Exception.class) public void create(Order order){ //1.创建订单 log.info("开始创建订单"); orderMapper.create(order); //2.减少库存 log.info("查询库存并且进行更改"); storageService.decrease(order.getProductId(),order.getCount()); //3.扣除费用 log.info("查询余额并扣除费用"); accountService.updateAccount(order.getUserId(),order.getMoney()); //4.修改状态 log.info("更改订单状态"); orderMapper.update(order.getUserId(),0); log.info("订单结束,O(∩_∩)O哈哈~"); } }