对于发起方的应用来说,如果参与者与发起方分别属于不同的应用,则发起方需要订阅参与者 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" />
开启分布式事务
为需要开启分布式事务的接口增加分布式事务注解
@DtxTransaction
(com.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
注解属性说明如下表所示。
参数 | 说明 |
| 必选项。该属性指定业务类型,由用户根据自己业务场景自定义,长度不超过 30 字符。 |
| 该属性指定事务超时时间,默认为 30 秒,您可以根据需要自定义,单位为秒。 超时会自动触发当前事务回滚。 |
| 该属性指定分布式事务的隔离级别,默认是为 |
发起方类配置 Bean
要让 Spring 框架扫描发起方的注解,需要让 Spring 框架感知到发起方的 Bean,以上述“YourClass”为例:
<bean id="yourClassBean" class="com.xxx.xxx.YourClass"/>
文档内容是否对您有帮助?