SOA 中的事务管理
Posted
技术标签:
【中文标题】SOA 中的事务管理【英文标题】:Transaction Management in SOA 【发布时间】:2012-04-28 13:32:24 【问题描述】:SOA 服务应该是自包含的服务,但实际上我们需要编排这些服务来执行某些业务/流程。
现在,为了使流程和数据保持一致,我们需要确保所有服务都已执行或没有执行。
一种实现方式是为每个服务实现“补偿”逻辑,并在进程/之前的服务出现问题时调用它。
有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似 2 阶段提交的东西?
【问题讨论】:
【参考方案1】:它确实取决于您正在访问的服务。在某些情况下,您将无法进行补偿,而在另一些情况下,您将无法控制交易,而在其他情况下,您将别无选择。
补偿处理程序和 2 阶段提交(XA 事务)都是管理事务的有效机制。
考虑您要连接的服务,以及它们提供的支持类型。例如,如果您有大量 Web 服务,您可能没有 XA 提供给您的事务控制,但它们可能具有反转操作的机制。
在一个完美的世界中,您将有 2 阶段提交,这将减少所需的补偿,但接口就是接口,就像人与人之间的沟通一样,沟通会有所不同,没有一个完美的解决方案。
在设计界面时,将事务控制和补偿恢复作为界面设计的一部分加以考虑,您会因创建有用的界面而受到表扬(或至少不会受到批评)。
【讨论】:
【参考方案2】:您可以使用 WS-BPEL 2.0 规范中定义的故障处理程序和补偿处理程序(该标准提供了一种描述和协调 Web 服务之间交互的方法),因此它以标准方式将业务逻辑与补偿逻辑分开.
Link BPEL 规范中的错误处理 Blog post 关于如何在 BPEL 中编写补偿处理程序【讨论】:
以上是关于SOA 中的事务管理的主要内容,如果未能解决你的问题,请参考以下文章