Springcloud 分布式事务解决方案 集成Naco Seata
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
消息一致性
基于TCC分布式事务
业务系统同时调用
@GlobalTransactional 是Seata的注释
orderFeignClient 订单微服务
accountFeignClient 客户微服务
storageFeignClient 库存微服务
@GlobalTransactional
public void purchase(String userId, String commodityCode, int orderCount) {
// 创建订单
orderFeignClient.create(userId, commodityCode, orderCount);
// 金额减少
accountFeignClient.debit(userId, orderCount);
// 库存服务 减少库存
storageFeignClient.deduct(commodityCode, orderCount);
}
@FeignClient(name = "account-service")
public interface AccountFeignClient {
@GetMapping("/test/debit")
Boolean debit(@RequestParam("userId") String userId, @RequestParam("count") int count);
}
@Transactional(rollbackFor = Exception.class)
public void debit(String userId, BigDecimal num) {
Account account = accountDAO.findByUserId(userId);
account.setMoney(account.getMoney().subtract(num));
if(account.getMoney().intValue()< BigDecimal.ZERO.intValue()){
throw new RuntimeException("余额不足");
}
accountDAO.save(account);
if (ERROR_USER_ID.equals(userId)) {
throw new RuntimeException("account branch exception");
}
}
- file.conf 的 service.vgroup_mapping 配置必须和`spring.application.name`一致
在 `org.springframework.cloud:spring-cloud-starter-alibaba-seata`的`org.springframework.cloud.alibaba.seata.GlobalTransactionAutoConfiguration`类中,默认会使用 `${spring.application.name}-fescar-service-group`作为服务名注册到 Seata Server上,如果和`file.conf`中的配置不一致,会提示 `no available server to connect`错误
也可以通过配置 `spring.cloud.alibaba.seata.tx-service-group`修改后缀,但是必须和`file.conf`中的配置保持一致
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/yaobo2816/article/details/111127301
粉丝福利:Java从入门到入土学习路线图
???
?长按上方微信二维码 2 秒
感谢点赞支持下哈
评论