全局事务服务 GTS如何另一组 API 在事务进行中如何操作事务上下文?
说明 可以参考 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);
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。