开发者社区> 问答> 正文

全局事务服务 GTS如何另一组 API 在事务进行中如何操作事务上下文?

全局事务服务 GTS如何另一组 API 在事务进行中如何操作事务上下文?

展开
收起
保持可爱mmm 2020-03-28 23:25:26 691 0
1 条回答
写回答
取消 提交回答
  • 说明 可以参考 txc-yun-sample 中的 sample-txc-simple-springree 和 sample-txc-dubbo 用例了解 API 的使用方式。 使用 String xid = TxcContext.getCurrentXid(); 获取当前全局事务 XID。 使用 TxcContext.bind(xid, null); 手工将事务上下文绑定到当前线程中。 使用 TxcContext.unbind(); 从当前线程中清除事务上下文,与 bind 操作对应。 暂停及恢复全局事务传播。 xid = TxcContext.suspendTxcTransaction():临时挂起当前线程里的事务上下文。 TxcContext.resumeTxcTransaction(xid) :将事务上下文恢复到当前线程,与 suspendTxcTransaction 操作对应。

    @TxcTransaction public void businessA() { String xid = TxcContext.suspendTxcTransaction(); // 调用 B TxcContext.resumeTxcTransaction(xid); }
    完全手工控制全局事务边界。

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

    }

    2020-03-28 23:27:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载