2

MSMQ からメッセージを引き出して処理を行い、メッセージの内容に応じてデータベースにデータを追加するアプリケーションを継承しました。私が制御していないサードパーティのアプリケーションによって、メッセージがキューにプッシュされています。

API の使用方法については基本的な理解がありますが、MSMQ についてはあまり知りません。

とにかく、メッセージが削除されることはなく、クライアントが明示的にメッセージを削除することは絶対にないことに気付きました。コンピューター管理を調べて、サーバーが最後に再起動されたときのメッセージを確認できます。

これは間違っていますか?キューが最大サイズに達すると、メッセージは自動的に削除され始めますか?それとも、メッセージが永遠に山積みになり、ゆっくりとメモリを消費しますか?

4

3 に答える 3

3

メッセージが処理されると、(トランザクションまたはその他の方法で) キューからメッセージを削除するのが通常の方法です。

于 2009-05-11T03:12:29.713 に答える
1

「とにかく、メッセージが削除されることはなく、クライアントが明示的にメッセージを削除することもありません。コンピュータの管理を調べて、サーバーが最後に再起動されたときのメッセージを確認できます。」

最後の再起動前からメッセージがない場合、メッセージはExpressのように聞こえます。ExpressメッセージはRAMにのみ保存され、ディスクに保持されないため、MSMQサービスを再起動するとメッセージが破棄されます。これがおそらく、メッセージの量がクリティカルレベルに達していない理由です。

MSMQはメモリストレージにカーネルメモリとディスクスペースを使用するため、最終的には2つのうちの1つがサーバーの安定性の問題を引き起こし、クリーンアッププロセスを計画するのが適切です。

乾杯、ジョン・ブレイクウェル(MSFT)

于 2009-06-04T10:56:47.090 に答える
1

これはベストプラクティスではありませんが、再起動時にキューがクリアされ、十分な量のリソースが利用可能である限り、実際に問題が発生することはないと思います。

そうは言っても、サーバーを圧倒しないように、定期的にキューをクリーンアップするように設定することを選択します。私はMSMQにあまり詳しくありませんが、メッセージが処理されたかどうかを確認する方法はありますか?実行される追加のサービスであっても、キュー内のメッセージをチェックして、それらがデータベースにすでに表示されているかどうかを確認し、表示されている場合は削除しますか?そうすれば、継承したコードベースはそのまま正常に機能するため、変更する必要はありません。

解決策を決定したら、ここに更新を投稿してください-この問題にどのように対処するのか知りたいです。ありがとう!

于 2009-05-11T02:50:54.507 に答える