十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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哈哈~");
}
}