我的问题是这样的:
假设我有一个事务管理器和 2 个资源管理器。
- TM 告诉 RM 做好准备。
- RM 承认他们已准备好/投赞成票。
- TM 告诉 RM 提交。
- RM 1 提交并确认提交。
- 由于网络故障,RM 2 永远不会收到提交消息。
在这种情况下,我知道 RM 2 处于等待状态,然后会话在数据库中超时并进入不确定状态。
如果在超过 AbandonTimeout 之前 TM 没有与 RM 重新连接,则该事务被放弃。
我的问题是,当 TM 继续尝试恢复 RM 时,全局事务会发生什么?
TM 在开始尝试恢复时是否向应用程序发送异常?
即使其中一个 RM 从未发送过确认,TM 是否会发回成功消息?
AbandonTimeout 默认为 24 小时。TM 是否将事务保留 24 小时,然后一旦达到超时,就发回异常?
在此链接中2 阶段 提交阶段 2 状态的结束:
- 协调器向所有群组发送提交消息。
- 每个队列完成操作,并释放事务期间持有的所有锁和资源。
- 每个群组向协调员发送确认。
- 协调器在收到所有确认后完成事务。
那么如果从未收到提交的确认,全局事务会发生什么?
在恢复操作期间,我找不到任何有关解决全局事务的信息。任何帮助,将不胜感激。
谢谢,马特