2012-06-26 26 views
2

我正试图在java上通过REST实现分布式服务事务。我有一些问题要问。当在两个阶段提交协议中回滚失败时会发生什么

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

回答

1

我没有这些问题的答案,但我为我的具体情况创建了一个特定的方法。因此,如果某人在同一案件中需要交易,请在这里发帖。

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

i。所有资源都将一个事务ID添加到数据库中的行中。在协调员询问资源的第一阶段,所有资源都使用协调员生成的事务标识在数据库中进行输入。

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

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

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

+0

当然,使用REST上的任何分布式事务是非常费力的,我可以通过研究我的需求来绕过这些努力。 – Vickey

相关问题