Hmily 源码解析 (三) —— 事务日志实体类


1. HmilyTransaction

  • 日志实体类。hmily的核心就是通过事务日志来保证分布式事务的最终一致性,HmilyTransaction就是日志记录的实体映射类。
  • 每一个微服务都有一张日志表。在同一个分布式事务之下,每一个微服务都有且会一条自己的事务日志记录,维护各自微服务内的事务处理。
属性说明
  1. transId
  • 事务id。同一个分布式事务下的所有事务日志id都是相同的。transId的一个原生作用就是来关联两个微服务的事务日志是否属于同一个事务。
  1. nodeTransId
  • 暂时无用
  1. status
  • TCC事务流转状态。值域为HmilyActionEnum枚举类型。来描述事务进展到什么状态,有四个状态,PRE_TRY(0, “开始执行try”)、TRYING(1, “try阶段完成”)、CONFIRMING(2, “confirm阶段”)、CANCELING(3, “cancel阶段”)。
  • PRE_TRY阶段不生成事务日志到数据库中,只有微服务正常执行完了相应的try阶段代码,才会将状态改为TRYING,并存储到数据库永久化
  1. role
  • 角色。值域为HmilyRoleEnum枚举类型。角色的作用比较复杂,简单来说,在通过切面时,会根据角色的不同选择执行不同的代码,起到分流的作用。并在适当的时候修改角色值,以保证下次进入切面时执行相应的代码。我觉得这种设计不是非常好,阅读起来很难受。
  1. retriedCount
  • 重试次数。在执行cofirm阶段或cancel阶段时,如果执行失败了,后面会定时再重试执行,并记录重试次数,如果达到阈值则不再重试并提醒管理员手动处理。
  1. createTime
  • 创建时间
  1. lastTime
  • 最后更新时间
  1. version
  • 版本,记录日志被更新的次数。
  1. pattern
  • 事务的类型,值域为PatternEnum 枚举类型。
  1. targetClass
  • 发起事务的函数的类的Class名
  1. targetMethod
  • 发起事务的函数的函数名
  1. confirmMethod
  • 发起事务的函数的Hmily注解上的confirmMethod参数值
  1. cancelMethod
  • 发起事务的函数的Hmily注解上的cancelMethod参数值
  1. hmilyParticipants
  • 事务协助类集合。在confirm阶段和cancel阶段,只有hmilyParticipants集合为空了才算是事务结束。

2. HmilyParticipant

  • 事务参与者类。每一个有@Hmily注解的方法,都会生成一个HmilyParticipant实例。是根据该方法对象及hmily注解的信息生成,并存储在该微服务的HmilyTransaction实例的hmilyParticipants集合的集合中,随事务日志一起持久化。
  • 在confirm阶段和cancel阶段根据该实例的信息以反射的方式调用相应的方法。
属性说明
  1. transId
  • 冗余的事务id,值同HmilyTransaction。
  1. status
  • 未使用,未知
  1. confirmHmilyInvocation
  • 封装confirm方法调用点。HmilyInvocation类型。通过该实例就可以调用方法上@Hmily注解描述的confirm方法。
  1. cancelHmilyInvocation
  • 封装cancel方法调用点。HmilyInvocation类型。通过该实例就可以调用方法上@Hmily注解描述的cacenl方法。

3. HmilyInvocation

  • 存储着调用某一个方法的信息。包含类信息,方法信息,参数信息,参数类型信息。根据该实例可以使用反射的方式根据相应的参数执行相应的方法。
属性说明
  1. targetClass
  • 类的类型信息
  1. methodName
  • 方法名
  1. parameterTypes
  • 方法参数类型数组
  1. args
  • 方法的参数值数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值