-
Notifications
You must be signed in to change notification settings - Fork 0
Manual
Shoukai Huang edited this page Aug 2, 2019
·
2 revisions
通过添加注解的方式,标注纳入全局分布式事务管理的
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或者其他未全局事务接口公用;
通过添加注解的方式启动分布式事务
@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实现,不能走远程调用