SOA服务应该是自包含服务,但实际上我们需要协调这些服务来执行某些业务/流程。
现在,对于一个过程&数据要保持一致,我们需要确保所有服务都被执行或者没有执行任何服务。
实现的一种方法是为每个服务实现“补偿”逻辑,并在进程/以前的服务中发生某些问题时调用它。
有没有更好的方法或一些标准来做同样的事情,例如,取出事务上下文并实现类似2阶段提交的东西?
答案 0 :(得分:2)
它取决于您正在访问的服务。在某些情况下,您将无法获得赔偿,而在其他情况下,您将无法控制交易,而在其他情况下,您将无可奈何。
补偿处理程序和2阶段提交(XA事务)都是管理事务的有效机制。
考虑与您接口的服务以及它们提供的支持类型。例如,如果您拥有大量Web服务,则可能没有XA将为您提供的事务控制,但它们可能具有用于撤消操作的机制。
在一个完美的世界中,你会有两阶段提交,这将减少所需的补偿,但接口是接口,就像人对人,沟通会有所不同,没有一个完美的解决方案。
在设计界面时,将交易控制和补偿恢复视为界面设计的一部分,您将因创建有用的界面而受到称赞(或至少不会受到批评)。
答案 1 :(得分:0)