1

シナリオは次のとおりです。

2台のマシン:「マシンA」と「マシンB」。

対応するIPアドレスが192.168.0.100(Aの場合)と192.168.0.200(Bの場合)であるとしましょう。どちらのマシンにも、WindowsServer2008のMSMQがインストールされています。

マシンA

次のキューが構成されています:private$\aaatransactional

そのキューに単一のコンシューマーがありRead、MSMQトランザクションのすべてのアクションをラップし、「現在の」メッセージからのみ読み取ります(つまり、カーソル操作は使用されません)。

マシンB

にメッセージを送信する単一のアプリケーションがありますFormatName:direct=os:192.168.0.100\private$\aaa。各Sendメッセージは、(C#のコード)を使用してMSMQトランザクションでラップされます
TimeToReachQueue = Message.InfiniteTimeout

TimeToBeReceived = Message.InfiniteTimeout

そして...質問

このシナリオとの構成ではprivate$\aaa、BからAに送信されるメッセージは次のとおりです。

  1. 一度お届けしますか?つまり、マシンAのコンシューマーアプリケーションで、「現在の」メッセージが実際に「新しい」(つまり、以前に処理されていない)ことを確認する必要がありますか?それとも、MSMQ自体がその問題を処理しますか?キューだからちょっとばかげているね!しかし、メッセージが正しいと主張する具体的な参考資料は見つかりませんでした。私はそのような主張を見ましたが、Microsoftの公式リソースからではありません。
  2. 順番に?つまり、M1ネットワークの問題が原因でBからAにメッセージを送信できず、ネットワークが正常に戻って、次のメッセージM2がマシンAに正常に送信される可能性はありますか?

どうもありがとう!

4

1 に答える 1

3
  1. Delivered Onceは保証されていますが、トランザクションキューがあることに注意してください。メッセージ処理が最初に失敗した場合、成功するか、ポイズンされたメッセージキューに移動されるまで、メッセージ処理は再度配信されます。したがって、「Delivered Once」はそのコンテキスト内でのみ保証され、操作する他のリソースもトランザクションであり、分散トランザクションに参加している場合は、安全である必要があります。

  2. メッセージは「送信された順序で一緒に送信されるか、まったく送信されない」。MSMQのヒントを参照してください

于 2011-03-23T15:47:07.357 に答える