SOA 服务应该是自包含的服务,但实际上我们需要编排这些服务来执行某些业务/流程。
现在,为了使流程和数据保持一致,我们需要确保所有服务都已执行或没有执行。
一种实现方式是为每个服务实现“补偿”逻辑,并在流程/先前服务中出现问题时调用它。
有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似 2 阶段提交的东西?
SOA 服务应该是自包含的服务,但实际上我们需要编排这些服务来执行某些业务/流程。
现在,为了使流程和数据保持一致,我们需要确保所有服务都已执行或没有执行。
一种实现方式是为每个服务实现“补偿”逻辑,并在流程/先前服务中出现问题时调用它。
有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似 2 阶段提交的东西?
它确实取决于您正在访问的服务。在某些情况下,您将无法进行补偿,而在其他情况下,您将无法控制交易,而在其他情况下,您将别无选择。
补偿处理程序和 2 阶段提交(XA 事务)都是管理事务的有效机制。
考虑您正在连接的服务,以及它们提供的支持类型。例如,如果您有大量的 Web 服务,您可能没有 XA 提供给您的事务控制,但它们可能具有用于反转操作的机制。
在一个完美的世界中,您将有 2 阶段提交,这将减少所需的补偿,但接口就是接口,就像人与人之间的沟通一样,沟通会有所不同,没有一个完美的解决方案。
在设计界面时,将事务控制和补偿恢复作为界面设计的一部分考虑,您将因创建有用的界面而受到赞扬(或至少不会受到批评)。