发起方配置

对于发起方的应用来说,如果参与者与发起方分别属于不同的应用,则发起方需要订阅参与者 RPC 服务。

跨服务 FMT 参与者服务订阅

  • 基于 SOFARPC 发布的服务订阅

    <sofa:reference id="dataServiceSofaRpc" interface=com.xxx.DataService" >
    <sofa:binding.tr/>
    </sofa:reference>
  • 基于 Dubbo 发布的服务订阅

    <dubbo:reference id="dataServiceDubbo" interface=com.xxx.DataService" />

开启分布式事务

  • 为需要开启分布式事务的接口增加分布式事务注解 @DtxTransactioncom.alipay.sofa.dtx.client.aop.annotation.DtxTransaction),表明此方法内部需要开启分布式事务。

    重要

    注解需放在方法实现之前。

  • 方法内部可以执行下列事务操作(无数量与先后顺序的限制):

    • 操作本地 FMT 参与者的 DAO 操作。

    • 调用基于 SOFARPC 或 Dubbo 发布的普通服务,该服务内再操作 FMT 参与者,跨服务 FMT 参与者。

业务方法正常返回则分布式事务提交,业务方法抛出异常则分布式事务回滚。

示例如下:

public class YourClass{
    @DtxTransaction(bizType="yourbizType")
    public void yourMethod(yourParams){
        try{
            //可以是 FMT 参与者数据源
            DAO1;

            DAO2;

            ......

            DAO N;

            // 调用 TCC 参与者一阶段try方法,try方法第一个参数值传'null';
            TCC.try();

            // 普通 rpc 调用,在该调用方法内可以访问 FMT 参与者数据源
            dataServiceSofaRpc.method();

            // 方法正常返回,事务提交
        }catch(Throwable t){
            // 出现异常,事务回滚
            throw t;
        }
    }
}
重要

该方法所在类需要配置成 Spring Bean 才能被分布式事务扫描器识别。

@DtxTransaction 注解属性说明如下表所示。

参数

说明

bizType

必选项。该属性指定业务类型,由用户根据自己业务场景自定义,长度不超过 30 字符。

timeout

该属性指定事务超时时间,默认为 30 秒,您可以根据需要自定义,单位为秒。 超时会自动触发当前事务回滚。

isolationLevel

该属性指定分布式事务的隔离级别,默认是为 READ_UNCOMMITTED(读未提交)。目前只支持 READ_UNCOMMITTED(读未提交)和 READ_COMMITTED(读已提交)两种隔离级别,可按需配置。

发起方类配置 Bean

要让 Spring 框架扫描发起方的注解,需要让 Spring 框架感知到发起方的 Bean,以上述“YourClass”为例:

<bean id="yourClassBean" class="com.xxx.xxx.YourClass"/>