为了账号安全,请及时绑定邮箱和手机立即绑定

感觉无法做到事务的统一控制,为什么?

感觉无法做到事务的统一控制,为什么?

胡说叔叔 2023-04-01 22:18:47
你好,想请教个问题:     刚才拜读了下 resty 的源码,看到关于多数据源事物控制实现的核心是如下的(TransactionAspect 类中): for (int i = 0; i < names.length; i++) {           dataSourceMeta = Metadata.getDataSourceMeta(names[i]);           dataSourceMeta.initTransaction(readonlys.length == 1 ? readonlys[0] : readonlys[i], levels.length == 1 ? levels[0] : levels[i]);           dataSourceMetas.add(dataSourceMeta);         }         //执行操作         result = ih.invoke(proxy, method, args);         for (DataSourceMeta dsm : dataSourceMetas) {           dsm.commitTransaction();         }       } catch (Throwable t) {         for (DataSourceMeta dsm : dataSourceMetas) {           dsm.rollbackTransaction();         }         String message = t.getMessage();         Throwable cause = t.getCause();         if (message == null) {           if (cause != null) {             message = cause.getMessage();           }         }感觉无法做到事务的统一控制,例如第一个数据源正常提交后,第二个数据源提交事务时出现异常时,是不能够回滚第一个数据源的事务的。后经测试也证明确实无法回滚。
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

理论上也不行啊,除非模式是像xa协议那样,有两段提交,要不然你不知道另一个事务是否会错误。

查看完整回答
反对 回复 2023-04-03
?
撒科打诨

TA贡献1934条经验 获得超2个赞

分布式事务从来都是大难题。一般都是想办法避开,不然实现太麻烦,性能也难以保障。

查看完整回答
反对 回复 2023-04-03
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信