Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用

1:依赖引入

        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
        
        
        
            com.alibaba
            druid
            1.1.3
        
        
            com.taobao.txc
            txc-client
            ${txc.version}
            system
            ${project.basedir}/../../../../lib/txc-client-2.0.69.jar
        

        
            com.alibaba.dauth
            sdk-client
            1.2.3
        

        
        
            commons-logging
            commons-logging
            1.1.1
        
        
            org.slf4j
            slf4j-log4j12
            1.6.4
        
        
            io.netty
            netty-all
            4.1.0.Final
        
        
            com.taobao.middleware
            logger.api
            0.1.5
        
        
            com.taobao.diamond
            diamond-client
            edas-3.7.3
        
        
            ch.qos.logback
            logback-core
            1.1.7
        

2:配置相关

    
        
        
        
            
        
        
    

    
    
    
    
        
        
        
        
     

3:注意事项

  • 启动类将第二步的配置文件引入 
    @ImportResource({"classpath:META-INF/applicationContext.xml"})
  • 微服务中所有的模块都需要做第一步和第二步的操作,并注意scaner设置的应用名应唯一
  • 第二步的配置文件中的scaner只适用于本地化开发,线上修改如下
        
            
            
            
            
            
        

  • 事务发起方业务处理类添加注解 
    @TxcTransaction(timeout = 1000 * 6) timeout默认为6000,为事务超时时间。
    @TxcTransaction(timeout = 1000 * 6)
    public Map getMoney(String id) {
        String xid = TxcContext.getCurrentXid();
        TxcContext.bind(xid,null);
        logger.info("查询service : " + xid);
        Map map = new HashMap<>();
        map.put("one", feignHelloService.getOne(id, xid));
        map.put("two", feignHelloService2.getOne(id, xid));
        TxcContext.unbind();
        return map;
    }

注意代码中我们获取了TXC中的事务ID - > xid  ,这个xid需要延服务链路传递到服务下游,这样下游的事务就按照最外层事务发起方的事务走。注意bind & unbind 两个方法,是为我们的事务和阿里GTS-SERVER的绑定操作,业务下游得到xid之后同样需要进行同样的绑定操作。若项目采用阿里EDAS分布式服务框架,xid的绑定操作无须编码,edas会自己传递。

  • 本地启用GTS事务分组需阿里技术人员将分组分配到公网,因为GTS默认只支持经典网络类型的ECS。或直接采用阿里内部公网事务分组 txc_test_public.1129361738553704.QD  免费版GTS在启用服务时,会有不稳定问题 ,一般待服务启动一段时间就不会出现事务链接超时的异常。

jar包下载地址


你可能感兴趣的:(【SpringCloud】,【分布式】)