在两个阶段提交协议中回滚失败时会发生什么

时间:2012-06-26 12:50:33

标签: rest transactions jta

我正在尝试通过REST在java中实现分布式服务的事务。我有一些问题要问。

  1. 当资源肯定地回答时会发生什么?在第2阶段他们没有提交?
  2. 我试图搜索,但不幸的是,我无法找到在2PC协议中回滚失败时会发生什么的正确答案。我知道它是一个阻塞协议,它等待无限时间的响应,但在现实世界的场景中会发生什么?
  3. 分布式事务管理的其他协议是什么?
  4. 我读到了有关事务实现的JTA,但还有其他任何可用于实现事务的实现吗? 任何回复都会有所帮助。提前致谢。

1 个答案:

答案 0 :(得分:1)

我没有这些问题的答案,但我为我的具体案例创建了一个具体的方法。因此,如果某人需要相同案件的交易,请在此处发布。

因为在我的情况下,数据库(或索引器,也作为服务运行)中的当前条目没有变化,但系统中只有新条目在不同的地方,所以错误的失败不是有害的,而是错误的成功是。所以对于我的特殊情况,我遵循了以下策略:

我。所有资源都会在数据库中添加一个事务ID。在协调器询问资源的第一阶段,所有资源都在数据库中创建具有协调器生成的事务id的条目。

II。在阶段1之后,当所有资源肯定地回答意味着资源已经对数据库进行了更改时,协调器在其自己的日志中输入事务成功的条目并将其传递给资源。所有资源都使插入的数据行中的事务状态成功。

III。服务持续运行以搜索数据库并通过询问协调器的状态来更正事务状态。如果没有条目或失败条目,则事务返回失败状态,并且在服务上更新相同。在获取数据时,如果数据库中存在具有失败标签的条目,则它始终使用协调器检查事务状态,如果没有失败条目,则过滤结果。因此,没有提供没有信息或存在故障信息的那些数据条目。所以结果总是一致的。

这个策略为我的案例提供了原子性的方法。