SOA中的事务管理

时间:2012-04-17 08:00:47

标签: transactions soa distributed-transactions bpm orchestration

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

现在,对于一个过程&数据要保持一致,我们需要确保所有服务都被执行或者没有执行任何服务。

实现的一种方法是为每个服务实现“补偿”逻辑,并在进程/以前的服务中发生某些问题时调用它。

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

2 个答案:

答案 0 :(得分:2)

它取决于您正在访问的服务。在某些情况下,您将无法获得赔偿,而在其他情况下,您将无法控制交易,而在其他情况下,您将无可奈何。

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

考虑与您接口的服务以及它们提供的支持类型。例如,如果您拥有大量Web服务,则可能没有XA将为您提供的事务控制,但它们可能具有用于撤消操作的机制。

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

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

答案 1 :(得分:0)

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

  • Link到BPEL Spec中的错误处理
  • Blog post关于如何在BPEL中编写补偿处理程序