2017-11-03 25 views
0

私は、MSMQ上のトランザクションメッセージングの概念とwcfのトランザクションサポートを理解しようとしています。キュー(MSMQ)のトランザクションサポート

トランザクションがサポートされているキューの場合、次の一連の操作が自動的に行われることを意味しますか?

  1. マシン1のクライアントAは、アプリケーションデータベースにメッセージをキューに送信する行を書き込みます。
  2. 注文を作成または送信キュー(たとえばMSMQ)にメッセージを作成します。
  3. MSMQメッセージは、マシン2のクライアントBによって取得されます。
  4. クライアントBは、独自のアプリケーションデータベースに注文行を作成しますか?

分散トランザクションで上記のすべての手順を実行した場合、4つの手順すべてが失敗するか、または原子的に成功することを意味しますか?

またはトランザクションはステップ1-2からのみ適用されますか?

同様に、MSMQの代わりに上記のWCFが含まれていた場合、すべてのステップがトランザクション内でアトミックになりますか?

+0

分散トランザクション内のすべてのステップは、コミットまたはロールバックされます。 –

答えて

1

短い答え:1 + 2はトランザクション、3 + 4は2番目のトランザクションです。受信者が送信者と同じトランザクションコンテキスト(すなわち、実行の同じ論理スレッド)にあることが、3と考えられる唯一の方法は、おそらく2と同じトランザクション内にある可能性があります。さもなければ、最初のトランザクションがコミットされていないので、メッセージは受信のためにまだ見えません。トランザクションコンテキストを送信者から受信者に伝搬させるためには、送信者から受信者への第2の通信チャネル(すなわち、リモート呼び出し)が必要であり、メッセージキューを冗長にする。しかし、受信はキューから別のメッセージを受け取ることさえあるかもしれないので、実際には意味がありません。

実際、トランザクション型MQのポイントは、送信者と受信者の2つの異なるトランザクション送信者は受信機の利用可能性と性能に影響されないことを、孤立を犠牲にして認識します。したがって、MQは、同じトランザクションコンテキスト内に2つの異なるアプリケーション(1および4)を持たずに、ストアおよび転送アトミック性+耐久性を提供します。あなたは1 + 2を原子的に、そして最終的に3 + 4を原子的に持つでしょう。

WCFでは、MQの代わりにWS-AtomicTransactionsを使用することで、同じトランザクションで1と4を持つことができます。 MQソリューションと比較して、これは4の影響なしで1の効果を観察することはないので、分離もできます。

関連する問題