推荐的方法来集成应用程序而不阻止交互

时间:2012-07-04 14:31:30

标签: c# multithreading transactions

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

我有三个应用程序,分别是A,B,C和相应的数据库databaseA,databaseB和databaseC。

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

现在我想使用应用程序C提供的某些API将应用程序B中的数据发送到应用程序C,同时对“databaseB”进行了一些更改。如果我使用的是用于A-> B事务的相同线程,则可能导致事务超时和许多其他问题。

相反,我可以为这三个应用程序的正确集成做些什么。我觉得这样的事情会好的。但我不知道如何制作这样的触发器..(在我的情况下A-> B,A-> C不遵循某些原因)

1.A-->databaseA triggers One another transaction i.e 
2.databaseA-->API from B-->databaseB  it triggers another transaction  
3.databaseB -->API from C -->databaseC

我想在应用程序级别执行此操作(不从数据库触发)。什么是从当前交易中触发新交易并且容易减少失败的最佳方法?

1 个答案:

答案 0 :(得分:2)

您需要某种异步且可靠的邮件传递。因此,App A在处理其消息时不会等待App 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建议的附加解决方案可以NServiceBus,它可以在MSMQ上提供抽象层。从来没有使用它,但只听到了很好的事情。