4

SOA 服务应该是自包含的服务,但实际上我们需要编排这些服务来执行某些业务/流程。

现在,为了使流程和数据保持一致,我们需要确保所有服务都已执行或没有执行。

一种实现方式是为每个服务实现“补偿”逻辑,并在流程/先前服务中出现问题时调用它。

有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似 2 阶段提交的东西?

4

2 回答 2

2

它确实取决于您正在访问的服务。在某些情况下,您将无法进行补偿,而在其他情况下,您将无法控制交易,而在其他情况下,您将别无选择。

补偿处理程序和 2 阶段提交(XA 事务)都是管理事务的有效机制。

考虑您正在连接的服务,以及它们提供的支持类型。例如,如果您有大量的 Web 服务,您可能没有 XA 提供给您的事务控制,但它们可能具有用于反转操作的机制。

在一个完美的世界中,您将有 2 阶段提交,这将减少所需的补偿,但接口就是接口,就像人与人之间的沟通一样,沟通会有所不同,没有一个完美的解决方案。

在设计界面时,将事务控制和补偿恢复作为界面设计的一部分考虑,您将因创建有用的界面而受到赞扬(或至少不会受到批评)。

于 2012-04-17T23:00:04.260 回答
0

您可以使用 WS-BPEL 2.0 规范中定义的故障处理程序和补偿处理程序(该标准提供了一种描述和协调 Web 服务之间交互的方法),因此它以标准方式将业务逻辑与补偿逻辑分开。

  • 链接到 BPEL 规范中的错误处理
  • 关于如何在 BPEL 中编写补偿处理程序的博客文章
于 2012-04-17T11:11:04.320 回答