3

MSMQ マルチキャストを使用している場合、(マルチキャストが有効な) キューがいくつかのメッセージを受信した後、マシンで一時的なネットワーク接続が失われた場合、接続が再確立されるとメッセージの受信が再開されます。ネットワークの停止期間が短い場合、キューはすべてのメッセージを受信します (受信マシンが切断されている間に送信されたものも含む)。ただし、期間が十分に長い場合 (数分)、一部のメッセージが失われます... 受信メッセージにギャップが生じます。

これは、MSMQ マルチキャストが信頼できる (ただし、配信が保証されていない) ため、予想される動作です。私の質問は、データが失われたときに MSMQ が情報を公開するかどうかです。私の理解が正しければ、PGMは既に「回復不能なデータ損失」を検出できますが、MSMQ はこの情報を公開しますか?

1 つの考えは、送信ごとにインクリメントされる各メッセージに整数を含めることです。これにより、受信者は(個々の送信者からの)メッセージのギャップを検出できます。しかし、PGM はすでにこれを行っていると思います。PGM/MSMQ が既にこれを検出できる場合、アプリケーション レベルでこれを追加したくありません。

助言がありますか?

4

1 に答える 1

1

私は MSMQ を扱ったことがないので、基礎となる PGM ソケットの回復不能な損失を通知する方法があるかどうかはわかりません。ただし、生の PGM ソケットでは、失われたパケットを回復できない場合 (たとえば、送信者が再送信キャッシュにデータをもう持っていない場合)、ソケットは切断されます。その場合、そのソケットの Receive メソッドは WSAECONNRESET を返します。基になるソケット接続のリセットを警告する可能性がある MSMQ の接続/切断イベントはありますか?

個人的には、私は常にメッセージにある種のアプリケーション レベル ヘッダーを含めます。たとえば、あなたの場合はソース (受信者の場合はこれが必要で、複数の送信者からデータを受信する場合) とシーケンス番号プロパティを含めてから、ギャップをチェックします。 TCP のような信頼性の高いプロトコルを介して不足しているデータを要求できる帯域外スナップショット サービス。

于 2009-09-28T03:08:25.157 に答える