相互に通信する 3 つの層を持つ MSMQ ベースのシステムがあります。簡単にするために、レイヤー 1、2、3 と呼びます。これらは次のように配置されます。
Layer 1 <-> Layer 2 <-> Layer 3
したがって、レイヤー 1 はレイヤー 2 とのみ通信し、レイヤー 3 はレイヤー 2 のみと通信し、レイヤー 2 は他の両方と通信します。これには4つのキューがあり、
Layer1_in
Layer1_out
Layer3_out
Layer3_in
そして、レイヤーはこのインフラストラクチャを介して通信します。
Layer 1 -> Layer1_out -> Layer 2
Layer 1 <- Layer1_in <- Layer 2
Layer 3 -> Layer3_out -> Layer 2
Layer 3 <- Layer3_in <- Layer 2
(これが必要以上に網羅的である場合は申し訳ありません)
とにかく、メッセージはレイヤー 1 からレイヤー 2 に渡され、何らかの処理が行われ、別の (関連する) メッセージがレイヤー 3 に送信され、その逆も同様です。私が抱えている問題は、レイヤー 1 からレイヤー 2 に 2 つのメッセージが送信されることがありますが、両方のメッセージを順番に受信するのではなく、最初のメッセージを 2 回受信することです。メッセージを非同期に受信するためBeginReceive
に onを使用しています。Layer1_out
それが完了すると、受信したメッセージを処理し、BeginReceive
再度呼び出して次のメッセージを取得します。
これを追跡するために、送信側にメッセージ カウンターを実装し、それをテキスト ファイルに書き込みました。プロパティを使用して、Extension
このメッセージ番号の文字列表現を格納し、処理側でメッセージ番号を取得できるようにしています。メッセージを受信すると、この番号を取得して別のファイルに書き込みます。これは、同じ内容の 2 つのファイルを生成する必要がありますが、代わりに次のようなものが表示されます。
00000000000000000214
00000000000000000215
00000000000000000215 <- this is bad!
00000000000000000217
00000000000000000218
00000000000000000219
受信ログでは、メッセージ 215 が 2 回処理され、216 が届かなかったことを示しています。私の目的では、同じメッセージを 2 回処理しても何の影響もありません (そのため、これがしばらくの間見過ごされてきたのはなぜですか) が、メッセージをまったく見逃すことは大きな問題です。
何かご意見は?