Skip to content

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参数)。

  1. 配置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:

TransactionRepository 类图

 在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);

    }
  1. 配置tcc-transaction-dubbo-redpacket

    配置生效tcc-transaction 和 transactionRepository和配置tcc-transaction-dubbo-captial类似,在此不做赘述。定义tcc接口如下:

    在接口方法上加上@Compensable将提供的接口标记为tcc接口:

      public interface RedPacketTradeOrderService {
    
         @Compensable
         public String record(RedPacketTradeOrderDto tradeOrderDto);
     }
    

文档将持续更新中。。。

Clone this wiki locally