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