2

私は、独自のデータベースを使用している複数のアプリケーションの統合に取り組んでいます。

A、B、Cの3つのアプリケーションがあり、それぞれ対応するデータベースdatabaseA、databaseB、databaseCがあります。

ここで、Aは、アプリケーションAで1つのトランザクションが発生している間の親アプリケーションであり、その更新'databaseA'と、アプリケーションBによって提供されるAPIを呼び出して'databseB'を更新する同じスレッドを使用します。

ここで、アプリケーションCが提供するAPIを使用して、アプリケーションBからアプリケーションCにデータを送信したいと思います。同時に、「databaseB」に変更が発生しました。A-> Bトランザクションに使用されるのと同じスレッドを使用している場合、トランザクションのタイムアウトや他の多くの問題が発生する可能性があります。

代わりに、これら3つのアプリケーションを適切に統合するために何ができるでしょうか。このようなものでいいと思います。しかし、そのようなトリガーを作成する方法がわかりません。(私の状況では、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を使用して行うことができます(後者をお勧めします)。

このようにして、3つのアプリすべてが緩く結合され、すべてのコンポーネントで非同期に処理を実行できます。

@dtryonによって提案されているように、MSMQ上に抽象化レイヤーを提供できる追加のソリューションはNServiceBusです。自分で使ったことはありませんが、良いことしか聞いていません。

于 2012-07-04T14:45:40.740 に答える