TCC Transaction Note

Try: 尝试执行业务

完成所有业务检查(一致性)

预留必须业务资源(准隔离性)

Confirm: 确认执行业务

真正执行业务

不作任何业务检查

只使用Try阶段预留的业务资源

Confirm操作满足幂等性

Cancel: 取消执行业务

释放Try阶段预留的业务资源

Cancel操作满足幂等性
  • tcc-transaction不和底层使用的RPC框架耦合

  • 在底层RPC框架为Dubbo情况下,可利用tcc-transaction-dubbo-*.jar提供的便利,方便应用使用tcc-transaction

  • 示例演示在下完订单后,使用红包帐户和资金帐户来付款,红包帐户服务RedPacketTradeOrderService和资金帐户服务CapitalTradeOrderService在不同的系统中。

  • 下完订单后,订单状态为DRAFT,在TCC事务中Try阶段,订单支付服务将订单状态变成PAYING,同时远程调用红包帐户服务和资金帐户服务,将付款方的余额减掉(预留业务资源)。

  • 如果在Try阶段,任何一个服务失败,tcc-transaction将自动调用这些服务对应的cancel方法,订单支付服务将订单状态变成PAY_FAILED,同时远程调用红包帐户服务和资金帐户服务,将付款方余额减掉的部分增加回去。

  • 如果Try阶段正常完成,则进入Confirm阶段(tcc-transaction自动调用),订单支付服务将订单状态变成CONFIRMED,同时远程调用红包帐户服务和资金帐户服务对应的confirm方法,将收款方的余额增加。

  • 特别说明下,由于是示例,在confirmcancel方法中没有实现幂等性,如果在真实项目中使用,需要保证confirmcancel方法的幂等性。

References