Himly框架源码解析

Hmily框架知识点:

1.基础配置@Hmily注解

@Hmily(confirmMethod = "", cancelMethod = "")

在所有需要配置分布式事务的方法上加上此注解,主要配置confirm方法和cancel方法。注意try、confirm、cancel方法的入参必须一样。Hmily会根据注解自动创建成服务链记录于日志。

Himly一共有4种事务状态:

  1. PRE_TRY(开始执行try)
  2. TRYING(try阶段开始)
  3. CONFIRMING(confirm阶段)
  4. CANCELING(取消阶段)。

以及5中事务角色:

  1. START(发起者)
  2. CONSUMER(消费者)
  3. PROVIDER(提供者)
  4. LOCAL(本地调用)
  5. 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框架的大致流程和主要使用到的基础已经介绍完了,后续还有待完善,谢谢关注。

猜你喜欢

转载自blog.csdn.net/qq_27113771/article/details/86665351