GTS提供一种非Spring框架下直接使用API开启事务的方式。

获取单例的全局事务操作对象

TxcTransaction txcTransaction = TxcTransaction.getInstance(vgroup, ak, sk)

其中TxcTransaction为单例对象,vgroup为客户申请的事务分组,ak/sk为用户的阿里云账号的AccessKey ID和AccessKey Secret。

开启分布式事务

txcTransaction.begin(timeout)timeout为设置事务超时时间,单位毫秒。开启的事务上下文会绑定到当前线程中。

提交分布式事务

txcTransaction.commit():根据当前线程中的事务上下文提交分布式事务。

回滚分布式事务

txcTransaction.rollback():根据当前线程中的事务上下文回滚分布式事务。

另一组 API 在事务进行中操作事务上下文

说明 可以参考txc-yun-sample中的sample-txc-simple-springfree 样例sample-txc-dubbo 样例了解API的使用方式。
  1. 使用String xid = TxcContext.getCurrentXid();获取当前全局事务XID。
  2. 使用TxcContext.bind(xid, null);手工将事务上下文绑定到当前线程中。
  3. 使用TxcContext.unbind();从当前线程中清除事务上下文,与bind操作对应。
  4. 暂停及恢复全局事务传播。
    • xid = TxcContext.suspendTxcTransaction():临时挂起当前线程里的事务上下文。
    • TxcContext.resumeTxcTransaction(xid) :将事务上下文恢复到当前线程,与suspendTxcTransaction操作对应。

      @TxcTransaction
      public void businessA()
      {
          String xid = TxcContext.suspendTxcTransaction();
          // 调用 B
          TxcContext.resumeTxcTransaction(xid);
      }                           
  5. 完全手工控制全局事务边界。
    public void myBusinessWithGlobalTransaction() {
         //创建一个全局事务实例
         TxcTransaction tx = TxcTransaction.getInstance("myTxcVgroup", "myAK", "mySK");
    
         String xid = null;
         try {
             //全局事务开启
             tx.begin(60000);
             //建议把xid打印到应用日志中,方便问题排查
             xid = TxcContext.getCurrentXid();
             logger.info("GTS Tx Begins: " + xid);
    
         } catch (TxcException ex) {
             //开启事务失败
             throw new MyBusinessException(ex);
         }
    
         try {
             //业务逻辑
    
             //全局事务提交
             tx.commit();
             logger.info("GTS Committed: " + xid);
         } catch (Throwable ex) {
             try {
                 //全局事务回滚
                 tx.rollback();
                 logger.info("GTS Rollbacked: " + xid);
             } catch (Throwable rollbackFailed) {
                 //打印回滚异常并记录xid以备数据核验
                 logger.error("Failed to rollback: " + xid, rollbackFailed);
             }
    
         }
    
     }