2

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

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

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

现在我想使用应用程序 C 提供的一些 API 将数据从应用程序 B 发送到应用程序 C,同时“数据库 B”发生了一些变化。如果我使用用于 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

我想在应用程序级别执行此操作(而不是从数据库触发)。什么是从当前事务触发新事务并且失败率较低的最佳方法?

4

1 回答 1

2

您需要某种异步且可靠的消息传递。因此,应用 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。我自己从未使用过它,但只听说过它的好消息。

于 2012-07-04T14:45:40.740 回答