Skip to content
Shoukai Huang edited this page Aug 2, 2019 · 2 revisions

使用手册

1. TCC使用说明

1.1 场景示例

1.2 RM端

通过添加注解的方式,标注纳入全局分布式事务管理的

asyncTry:异步执行的try动作,不能有返回结果或者返回结果的值不被TM后续执行步骤所依赖,异步try部分需要全部执行完成后才能进行commit或者cancel部分 asyncConfirm:异步执行commit,执行完成时间可能晚于TM的事务完成时间; asyncCancel:异步执行cancel,执行完成时间可能晚于TM的事务完成时间;

异步执行部分,都会重试。

@TccAction(commitMethod="commit",cancelMethod="cancel",asyncConfirm=true,asyncCancel=true,retryMaxAttempts=3,retryPeriod=100L,retryMaxPeriod=1000L)
public BusinessRsDTO try(BusinessQueryDTO query){
    return new BusinessRsDTO();
}

public void commit(BusinessQueryDTO query){
}

public void cancel(BusinessQueryDTO query){
}

说明

  • RM端可以被多个TM或者其他未全局事务接口公用;

1.3 TM端

通过添加注解的方式启动分布式事务

@GlobalTransactional(
    // 无异常处理类,统一记录日志,不影响当前方法执行
    // 可选,统一处理类
    exceptionHandlerClass=TccExceptionHandler.class,
    // 可选,统一处理Bean,需要Spring支持,无Spring环境忽略
    exceptionHandlerBeanName="tccExceptionHandler",
    // 可选,Commit失败处理
    exceptionCommitHandlerClass=TccCommitExceptionHandler.class,
    // 可选,Commit失败处理Bean,需要Spring支持,无Spring环境忽略
    exceptionCommitHandlerBeanName="tccCommitExceptionHandler",
    // 可选,Cancel失败处理
    exceptionCancelHandlerClass=TccCancelExceptionHandler.class,
    // 可选,Cancel失败处理Bean,需要Spring支持,无Spring环境忽略
    exceptionCancelHandlerBeanName="tccCancelExceptionHandler"
)
public void execute(){
    // 同步执行
    BusinessRsDTO rs = businessAFeign.try(query);
    if(rs!=null){
        // 异步执行,会在commit或者cancel部分执行前执行完成
        businessBFeign.try(query);
    }
    // 默认情况是:不抛出异常情况执行commit操作
    // 可选部分,可以手动回滚。
    TransactionManager.getCurrentTransaction().fail();
}

说明

  • TM运行()中途抛除运行时异常,框架会执行cancel流程;
  • TM运行过程中崩溃导致全局事务执行超时,会根据状态执行未完成流程(try过程中崩溃,执行cancel过程,commit或者cancel中崩溃,进行重试)
  • TM端中可能包含RM,TM和RM在统一服务时,参考dubbo的inJVM实现,不能走远程调用
Clone this wiki locally