2

我使用了几个通过面向服务架构连接的系统,这些系统包括:.NET 技术、Java WebLogic Service 和 SAP RFC。

是否有可能跨这些不同的技术实现分布式事务?例如,当更新 SAP 失败时,我们需要确保 .NET 和 Java 事务根本不会发生。

真的很感谢您的意见,或者您可以指出我们可以在哪里学习如何做的基础知识?

4

2 回答 2

0

我不建议在系统之间使用分布式事务,因为它会在它们之间产生大量耦合并增加每个系统的负载,因为它为其他系统持有锁(你可以看到我写的一篇名为“事务集成反模式”的文章" )。正如 Vikdor 所建议的,通常更好的选择是使用Saga,您可以手动或通过一些外部协调器(例如使用Orchestration)进行协调。

请注意,补偿逻辑可能无法完全撤消操作(例如,在零售场景中,如果订单导致您达到库存阈值并且从供应商处订购,则取消该订单不必从您的供应商。您也可能无法全额退款等)

于 2012-09-11T12:04:13.983 回答
0

我会这样做:

  1. 与服务的每次交互都是一个命令,其中定义了execute()方法undo()
  2. 维护一堆命令,每条命令成功就推送。
  3. 当命令失败时,即与服务的交互失败,从堆栈中弹出每个命令并调用undo().

不过,您可能会在 .NET 中寻找任何能够开箱即用地提供此功能的分布式事务API。

于 2012-09-10T09:14:14.933 回答