C# 在不阻塞交互的情况下集成应用程序的推荐方法

C# 在不阻塞交互的情况下集成应用程序的推荐方法,c#,multithreading,transactions,C#,Multithreading,Transactions,我正在处理使用自己数据库的多个应用程序的集成 我有三个应用程序,比如A、B、C,分别带有相应的数据库databaseA、databaseB和databaseC 这里,当应用程序A中发生一个事务时,A是父应用程序,它更新“databaseA”,并使用相同的线程调用应用程序B提供的API并更新“DatabaseB” 现在我想使用应用程序C提供的一些API将数据从应用程序B发送到应用程序C,同时“databaseB”也发生了一些变化。如果我使用的线程与用于A->B事务的线程相同,则可能会导致事务超时和

我正在处理使用自己数据库的多个应用程序的集成

我有三个应用程序,比如A、B、C,分别带有相应的数据库databaseA、databaseB和databaseC

这里,当应用程序A中发生一个事务时,A是父应用程序,它更新“databaseA”,并使用相同的线程调用应用程序B提供的API并更新“DatabaseB”

现在我想使用应用程序C提供的一些API将数据从应用程序B发送到应用程序C,同时“databaseB”也发生了一些变化。如果我使用的线程与用于A->B事务的线程相同,则可能会导致事务超时和许多其他问题

相反,我可以做些什么来正确集成这三个应用程序。我想这样的事情会好起来的。但我不知道怎么做这样的触发器。。(在我的情况下,A->B,A->C不符合某些原因)


我希望在应用程序级别执行此操作(而不是从数据库触发)。从当前事务触发新事务并减少故障的最佳方法是什么?

您需要某种异步和可靠的消息传递。因此,应用程序A在处理其消息时不会等待应用程序B,以此类推。但这意味着您可以访问代码

我认为这种机制可以通过MSMQ实现:

App A -> Message1 -> AppB Inbound Queue
App A -> Message2 -> AppB Inbound Queue

.... Later, when App B is able to do some work

App B Inbound Queue -> transaction -> Message1 -> App B 
App B processes Message 1 -> App B Database
App B -> Message3 -> AppC Inbound Queue

.... and so on 
MSMQ集成可以通过使用托管消息队列API或通过MSMQ使用WCF(我推荐后者)来完成

这样,所有三个应用程序都是松散耦合的,可以在所有组件中异步处理


正如@dtryon所建议的,可以在MSMQ上提供抽象层的其他解决方案是。我自己从来没用过,但只听说过它的优点。

回答得很好。我还将NServiceBus作为MSMQ的良好抽象。
App A -> Message1 -> AppB Inbound Queue
App A -> Message2 -> AppB Inbound Queue

.... Later, when App B is able to do some work

App B Inbound Queue -> transaction -> Message1 -> App B 
App B processes Message 1 -> App B Database
App B -> Message3 -> AppC Inbound Queue

.... and so on