Hmily框架知识点:
1.基础配置@Hmily注解
@Hmily(confirmMethod = "", cancelMethod = "")
在所有需要配置分布式事务的方法上加上此注解,主要配置confirm方法和cancel方法。注意try、confirm、cancel方法的入参必须一样。Hmily会根据注解自动创建成服务链记录于日志。
Himly一共有4种事务状态:
- PRE_TRY(开始执行try)
- TRYING(try阶段开始)
- CONFIRMING(confirm阶段)
- CANCELING(取消阶段)。
以及5中事务角色:
- START(发起者)
- CONSUMER(消费者)
- PROVIDER(提供者)
- LOCAL(本地调用)
- INLINE(内嵌RPC调用)
2.aop处理
使用aop拦截实现执行方法前后的控制,根据角色来决定执行的具体transactionHandler。
transactionHandler主要是创建事务信息(HmilyTransaction由filter传递来的)、执行业务方法、以及根据结果控制事务走向(从try->confirm,或者try->cancel)。这里的handler我只是介绍了StartTransactionHandler,不同的角色有不同的handler。StartTransactionHandler是最新开始处理的,也是在收到其他事务处理完成以后最后做判断的,所有流程的控制都在这个类。
3.RPC特性 SPI
@Activate(group = {Constants.SERVER_KEY, Constants.CONSUMER})
public class DubboHmilyTransactionFilter implements Filter
这里的Activate定义了在消费者调用提供者时激活此Filter(这里的SERVER_KEY还不知道是什么意义)。此处的Filter主要目的是完成服务链的信息传递,比如从发起者开始定义一个transid,在随后调用其他服务之前都会先将此transid记录在ThreadLocal并通过RpcContext传递给提供者,保证每一个参与者能够准确匹配到上下文,完成事务信息的记录以及后续的操作。
4.Hmily框架初始化
主要通过spring的自动加载实现初始化并加载bean上下文。
初始化主要是三个内容:
loadSpiSupport用于加载配置文件、一个是选择的补偿信息存储方案、一个是序列化方案。
EventPublisher使用了disruptor框架实现异步补偿信息处理,根据事务发来的类型对日志信息进行相应的处理,这里使用disruptor框架主要是为了避免框架本身对业务事务的影响,由于框架是嵌入业务项目中的,所以使用异步可以保证框架自身的报错不影响业务进行。
CoordinatorService其实就是补偿机制,用于自动回滚之前失败的事务来保证事务的最终一致性。里面实际是一个自动任务,每隔一段时间自动查询数据库,找出需要回滚的事务进行自动回滚(执行cancel),此处也是不会影响业务的正常运行。里面也会根据重试次数和事务类型降低回滚的不必要操作。
自此Hmily框架的大致流程和主要使用到的基础已经介绍完了,后续还有待完善,谢谢关注。