Skip to content

Developer Guide

liuyangming edited this page Apr 2, 2019 · 11 revisions

一、整体设计

1.1、模块设计


组件说明:

  1. TCC服务:由实现业务接口的三个实现类(业务实现类,确认实现类,取消实现类)一起构成一个TCC型服务;
  2. 业务代理逻辑:TCC服务的业务实现类,在spring容器中注册为bean之后,由Spring容器创建的AOP代理对象。该类与业务实现类实现相同的业务接口,spring容器基于该代理实现请求拦截以及事务控制;
  3. CompensableManager(TCC全局事务管理器):实现JTA规范的TransactionManager,供Spring容器直接调用,负责Spring容器中声明式事务的commit、rollback、suspend、resume等管理操作;
  4. CompensableTransaction:负责全局事务相关的处理逻辑,实现TransactionListener接口,在ByteJTA本地事务commit/rollback本地事务时会接收到相应的通知及状态;
  5. CompensableCoordinator(TCC分支事务协调者):实现TransactionParticipant接口。由RPC自定义拦截器(客户端)调度,提供远程事务分支管理接入入口;
  6. ByteJTA:实现TransactionManager & TransactionParticipant接口。由ByteTCC调度,提供本地事务管理接入入口;
  7. CompensableLogger(事务日志管理模块):负责事务日志的存储及读取;
  8. TransactionRecovery(事务恢复处理模块):负责未完成事务的数据恢复、状态判定并向事务管理模块提供事务完成方向建议;
1.2、执行原理介绍

二、全局事务管理

  1. 业务子系统发起业务请求时,Spring容器使用事务拦截器拦截该业务请求,在转发业务请求之前,开启全局事务,并在转发业务请求之后完成(提交/回滚)全局事务。
  2. 全局事务回滚时,会回调当前事务中业务逻辑的补偿逻辑(前提是该业务逻辑的操作已经生效,即DB事务已经提交)。

三、本地事务管理:Try业务操作

  1. 业务子系统发起业务请求时,Spring容器使用事务拦截器拦截该业务请求,在转发业务请求之前,开启本地事务,并在转发业务请求之后完成(提交/回滚)本地事务。

四、本地事务管理:Confirm/Cancel操作

  1. 事务管理器根据全局事务完成方向的决策判断来发起Confirm/Cancel请求;
  2. 当全局事务决定提交时,事务管理器触发确认操作,Spring容器使用事务拦截器拦截该确认请求,在转发确认操作之前,开启本地事务,并在确认操作完成之后提交该本地事务;
  3. 当全局事务决定回滚时,事务管理器触发取消操作,Spring容器使用事务拦截器拦截该取消请求,在转发取消操作之前,开启本地事务,并在取消操作完成之后提交该本地事务;

五、扩展点

自定义的扩展类均需要注册到org.bytesoft.bytetcc.TransactionBeanFactoryImpl中(具体可参考bytetcc.xml中默认实现类的配置)。

5.1. CompensableLogger扩展

org.bytesoft.compensable.logging.CompensableLogger接口是ByteTCC的事务日志管理接口,ByteTCC事务管理器通过该接口记录、读取活动事务的日志信息,该接口的默认实现为org.bytesoft.bytetcc.logging.SampleCompensableLogger。用户也可以根据需求自定义该接口的实现,扩展事务日志管理功能。

5.2. TransactionInterceptor扩展

org.bytesoft.transaction.supports.rpc.TransactionInterceptor接口是ByteTCC用于在远程调用时拦截RPC请求/响应的处理接口,该接口用于为service的远程调用传播事务上下文等用途,默认实现为org.bytesoft.bytetcc.supports.rpc.CompensableInterceptorImpl。用户若需要新增RPC框架的支持时,需要自定义本接口。

注意:不同的RPC框架,根据其特性不同,需要定制的内容可能会相差较大。

If you've found byteTCC useful, and would like to support future development of byteTCC, please consider donating. Any amount is appreciated.

WeiXin

Alipay

Clone this wiki locally