-
Notifications
You must be signed in to change notification settings - Fork 2.8k
2 快速开始
changmingxie edited this page May 31, 2021
·
35 revisions
未完待续。。。
让我们从一个微服务示例开始。
用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:
支付服务:根据采购需求创建订单,发起支付。
资金服务:从用户资金帐户中扣除余额。
红包服务:从用户红包账户中扣除余额。
微服务部署架构图
红包服务:
public interface RedPacketTradeOrderService {
public String record(RedPacketTradeOrderDto tradeOrderDto);
}
资金服务:
public interface CapitalTradeOrderService {
public String record(CapitalTradeOrderDto tradeOrderDto);
}
支付服务:
public void makePayment(@UniqueIdentity String orderNo) {
System.out.println("order try make payment called.time seq:" + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
Order order = orderRepository.findByMerchantOrderNo(orderNo);
String result = capitalTradeOrderService.record(buildCapitalTradeOrderDto(order));
String result2 = redPacketTradeOrderService.record(buildRedPacketTradeOrderDto(order));
}
示例包含tcc-transaction-dubbo-sample 和 tcc-transaction-http-sample 两个。这两个示例业务模型内容是一样的,区别在于rpc不一样,tcc-transaction-dubbo-sample 演示使用隐式传参的方式传输tcc-transaction在rpc调用过程中需要传输的参数TransactionContext,而tcc-transaction-http-sample演示使用显示传参(接口方法中定义TransactionContext参数)。
-
配置tcc-transaction-dubbo-capital
1.1 生效tcc-transaction
在spring项目中可以使用xml配置或者注解来生效tcc-transaction。
a. XML配置
<tcc:annotation-driven transaction-repository="transactionRepository"/>
b. 注解配置
@EnableTccTransaction
1.2 配置transaction repository
transaction repository用来保存事务日志,框架提供多种Transaction Repository:
在tcc-transaction-dubbo-sample中使用MemoryStoreTransactionRepository(没有持久化能力,仅可用于测试):
<bean id="transactionRepository" class="org.mengyun.tcctransaction.repository.MemoryStoreTransactionRepository"> <property name="domain" value="TCC:DUBBO:CAPITAL:"/> </bean>
1.3 提供tcc接口
在接口方法上加上@Compensable将提供的接口标记为tcc接口:
public interface CapitalTradeOrderService { @Compensable public String record(CapitalTradeOrderDto tradeOrderDto); }
文档将持续更新中。。。