携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天
ByteTCC Quick Start
User Guide 0.4.x
- LocalXADataSource
- @Compensable注解
- @Import(SpringCloudConfiguration.class)
- @ImportResource({ "classpath:bytetcc-supports-springcloud.xml" })
LocalXADataSource封装底层的数据源,捕获在一个分布式事务中对哪些数据库执行了哪些SQL操作。
在分布式事务中操作的各个库,都要创建一个bytejta表,LocalXADataSource记录分布式事务中执行的各个SQL语句,记录一下状态,插入到底层的各个库的bytejta表中,记录分布式事务的状态。
@Compensable将每个接口定义成tcc接口
@Import和@ImportResource定义ByteTCC的Bean以及组件,在系统启动的时候bean和组件就会开始工作。
CompensableFeignBeanPostProcessor,实现BeanPostProcessor接口,处理feign里面的FeignInvocationHandler。针对feign的一个bean,创建了一个自己的动态代理,然后自己的动态代理就可以去拦截spring cloud底层对feign的一些执行和机制,可以在你执行feign进行接口调用的时候,干一些事情。
如果是使用了hystrix之后,会拦截hytrixInvocationHandler,创建自己的动态代理拦截相关的bean的调用
在SpringCloudConfiguration里面是对spring cloud原生的一些组件,比如说feign执行过程中涉及到的一些bean组件创建了自己的动态代理以及拦截器,可以在spring cloud进行服务调用的时候,进行一些自己的特殊的处理。
组件分类:
BeanFactoryPostProcessor
校验、注入
Work
定时任务
HandlerInterceptor
ByteTCC 拦截器
Controller
ByteTCC web请求
MethodInterceptor
ByteTCC 方法拦截器
SpringCloudConfiguration
public class SpringCloudConfiguration extends WebMvcConfigurerAdapter implements BeanFactoryPostProcessor, InitializingBean,
CompensableEndpointAware, EnvironmentAware, ApplicationContextAware {
}
bytetcc-supports-springcloud.xml
bytetcc-disable-tx-advice.xml
TransactionConfigPostProcessor
CompensableAnnotationValidator
校验 try/confirm/cancel 类定义的TCC方法。 SimplifiedCompensable: DeclaredRemotingException:校验不能声明RemotingException TransactionalPropagation:校验异常传播机制必须是存在事务 TransactionalRollbackFor:校验事务回滚异常必须包含方法签名异常
// @Compensable
this.validateSimplifiedCompensable(method, clazz);
this.validateDeclaredRemotingException(method, clazz);
this.validateTransactionalPropagation(method, clazz);
String confirmableKey = compensable.confirmableKey();
String cancellableKey = compensable.cancellableKey();
this.validateDeclaredRemotingException(method, clazz);
this.validateTransactionalPropagation(method, clazz);
this.validateTransactionalRollbackFor(method, clazz, confirmableKey);
CompensableContextPostProcessor
处理CompensableContextAware的BeanFactoryPostProcessor
SpringCloudEndpointPostProcessor
处理SpringCloudEndpoint的BeanFactoryPostProcessor
TransactionDebuggablePostProcessor
CompensableBeanPostProcessor
CompensableFeignBeanPostProcessor
ManagedConnectionFactoryPostProcessor
XADataSource --> LocalXADataSource
XAConnectionFactory
ManagedConnectionFactory
ManagedConnectionFactoryHandler & InvocationHandler
classDiagram
class XADataSource
class XAConnectionFactory
class ManagedConnectionFactory
class InvocationHandler
class ManagedConnectionFactoryHandler
ManagedConnectionFactoryHandler:+delegate Object
ManagedConnectionFactoryHandler:+identifier String
InvocationHandler <|.. ManagedConnectionFactoryHandler : 动态代理
ManagedConnectionFactoryHandler <-- XADataSource : delegate
ManagedConnectionFactoryHandler <-- XAConnectionFactory : delegate
ManagedConnectionFactoryHandler <-- ManagedConnectionFactory : delegate
ResourceAdapterImpl & ResourceAdapter
总结:
1. 扫描@Compensable
2. LocalXADataSource动态代理
ResourceAdapterImpl & ResourceAdapter
负责运行后台线程任务的组件
SimpleWorkManager
CompensableWork & Work
后台线程
系统启动恢复事务
系统运行期间定时尝试恢复事务
CleanupWork & Work
后台线程
系统运行期间定时尝试清除已完成的ByteTCC相关的分布式事务数据
SampleCompensableLogger & Work
CompensableCoordinatorController
ByteTCC框架的Controller,提供prepare、commit、rollback、recover、forget等接口。
CompensableFeignBeanPostProcessor
CompensableFeignHandler
封装feign原生的InvocationHandler(feign.ReflectiveFeign$FeignInvocationHandler),所有对@FeignClient接口的调用,首先都会先进入ByteTCC框架扩展的Feign处理逻辑中。
处理Ribbon负责均衡相关问题
CompensableHandlerInterceptor & org.springframework.web.servlet.HandlerInterceptor
MVC拦截器:获取并解析请求头的HEADER_TRANCACTION_KEY值,维护一个分布式事务。
CompensableMethodInterceptor & org.aopalliance.intercept.MethodInterceptor
解析目标Controller的@Compensable注解、@Transactional注解及其他信息
TransactionInterceptor & TransactionAspectSupport & MethodInterceptor
事务处理流程正式开始。。。。。
================================================================
音之呼吸 - 十一之型 - 华丽的结束了 ----------------------------------
================================================================