4

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

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

1 回答 1

1

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

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

一世。所有资源都在数据库中的行中添加了一个事务 ID。在协调器请求资源的第一阶段,所有资源在数据库中使用协调器生成的事务 id 进行条目。

ii. 在第一阶段之后,当所有资源都回复肯定时,这意味着资源已经对数据库进行了更改,协调器在自己的日志中记录事务成功并将其传达给资源。所有资源使插入的数据行中的事务状态成功。

iii. 一项服务不断运行以搜索数据库并通过向协调器询问状态来更正事务状态。如果没有条目或失败条目,则事务返回失败状态,并在服务上更新。在获取数据时,如果数据库中有一个带有失败标签的条目,那么它总是与协调器检查事务状态,如果没有失败条目,它会过滤结果。因此,不提供没有信息或存在故障信息的那些数据条目。所以结果总是一致的。

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

于 2012-07-09T10:25:43.443 回答