事务注解


@USTxTry

在微服务的@USEntry接口上添加@USTxTry注解,可以开启此接口的事务处理:

    @USTxTry(
            propagation = Transaction.PROPAGATION_USE,
            submit = Transaction.SUBMIT_ORIGIN,
            compensation = @USTxCompensation(
                    confirm = Transaction.COMPENSATION_REDO,
                    cancel = Transaction.COMPENSATION_SUBMIT
            )
    )
    @USEntry(
            tips = "事务测试",
            timeout = 10
    )
    public void test(ServiceContext ctx) {
        //todo
    }
  • propagation,事务的开启/传播方式
取值 说明
PROPAGATION_PASS 如果在全局事务中,则只向后传递事务,自身不参与全局事务; 如果不在事务中,也不开启新事务
PROPAGATION_META 如果存在全局事务,则加入;否则仅开启本地事务(无后续分支事务,不需要事务管理器)
PROPAGATION_USE 如果存在全局事务,则加入;否则开启新的全局事务
PROPAGATION_NEW 不管是否存在全局事务,都开启新的全局事务
  • submit,事务的提交方式
取值 说明
SUBMIT_NONE 不需要提交(本接口不包含本地事务)
SUBMIT_ORIGIN "原地"提交:在Confirm/Cancel阶段可以使用Try阶段的服务对象进行commit/rollback操作(适用于采用传统XA方式的事务实现)
SUBMIT_ANY "任意"提交:提交动作可以由任意一个服务实例执行(适用于采用"数据补偿"方式的事务实现)
  • compensation,事务提交失败时的补偿方式

    提交动作(包括commit/rollback)是由事务管理器发起的,一个全局事务会包含若干分支事务,每个分支事务实际对应一个微服务的业务接口,当全局事务需要submit时,事务管理器会依次向各个分支事务的服务接口发起"提交"请求,这些请求有可能会失败,compensation约定了submit动作失败后,事务管理器如何进行重试的策略。

    补偿模式的取值说明如下:

取值 说明
COMPENSATION_NONE 不能补偿
COMPENSATION_SUBMIT 仅补偿提交动作
COMPENSATION_REDO 可以重新发起事务(事务接口必须是幂等的,且仅对CONFIRM有效)

如果声明了补偿方式,对于"提交"失败的分支事务,事务管理器会在第1/5/30分钟分别进行3次"重试",直到分支事务"提交"成功或最终失败。

@USTxConfirm / @USTxCancel

针对@USTxTry声明的事务接口,@USTxConfirm和@USTxCancel分别用来声明该接口的"提交"动作(commit/rollback)的处理方法(服务类的成员函数),注解的定义如下:

    @USTxConfirm(entry="test")    // 对应的接口,可以用"*"表示通配符
    public void commit(ServiceContext ctx) {
        //todo
    }

    @USTxCancel(entry="test")    // 对应的接口,可以用"*"表示通配符
    public void rollback(ServiceContext ctx) {
        //todo
    }

results matching ""

    No results matching ""