springcloud分布式事务处理方案

https://blog.csdn.net/zhangxing52077/article/details/81587988

     笔者在公司最近的一个项目采用springcloud框架搭建微服务架构,这势必会引发分布式事务处理的思考,目前处理分布式主流方案tcc及消息的最终一致性;今天笔者集成github上较为流行的tx-lcn分布式处理框架,它是基于redis的一种补偿型处理方案

2.实现方案

①先截图,下载该框架

springcloud分布式事务处理方案_第1张图片

从github上的starts数量来看,目前还是较多开发者采用了这种方案的,而且作者维护迭代也很及时

②将tx-manager微服务单独拎出来,集成在自己的项目中

springcloud分布式事务处理方案_第2张图片

将tx-manager中application.properties中的配置改成自己的项目配置

③然后涉及分布式的微服务中添加如下依赖


   
   
   
   
  1. <dependency>
  2. <groupId>com.codingapi groupId>
  3. <artifactId>transaction-springcloud artifactId>
  4. <version>${lcn.last.version} version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.slf4j groupId>
  8. <artifactId>* artifactId>
  9. exclusion>
  10. exclusions>
  11. dependency>
  12. <dependency>
  13. <groupId>com.codingapi groupId>
  14. <artifactId>tx-plugins-db artifactId>
  15. <version>${lcn.last.version} version>
  16. <exclusions>
  17. <exclusion>
  18. <groupId>org.slf4j groupId>
  19. <artifactId>* artifactId>
  20. exclusion>
  21. exclusions>
  22. dependency>

④下载tx-demo,参考链接:https://github.com/codingapi/springcloud-lcn-demo

将其中的两个实现类复制到自己工程的service中

springcloud分布式事务处理方案_第3张图片

⑤开启tx-manager,在各个微服务application.yml配置tx-manager地址


   
   
   
   
  1. # 分布式事物
  2. tm:
  3. manager:
  4. url: http://localhost:8899/tx/manager/

3.应用步骤

①分布式事务起始服务方


   
   
   
   
  1. @Transactional
  2. @TxTransaction(isStart = true)
  3. public int addAcount(String logId){
  4. int i = yiViUserAccountMapper.increaseAccount("100","71d8beff-9e70-11e7-9a60-00163e0a3457");
  5. int n = paymentDispatchFeignClient.test(logId); //调用失败
  6. if(n == 0){
  7. throw new RuntimeException("服务调用失败");
  8. }
  9. return i + n;
  10. }

②被调用服务方


   
   
   
   
  1. @Override
  2. @Transactional
  3. @TxTransaction
  4. public int test(String logId) throws YiViException {
  5. int i = yiViDispatchOrderStatusLogMapper.deleteByPrimaryKey(logId);
  6. return i;
  7. }

如此便可,好了我是张星,欢迎加入博主技术交流群,群号:526601468

你可能感兴趣的:(springcloud)