2009-05-11 21 views
2

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

私はMSMQについてよく知らないが、私はAPIの使い方を基本的に理解している。

とにかく私はメッセージが決して削除されないことに気がつきました。私たちのクライアントは絶対に明示的にそれらを削除することは決してありません。そしてコンピュータ管理を見て、サーバが最後にリブートされた時のメッセージを見ることができます。

これは間違っていますか?キューがいくつかの最大サイズに達すると、メッセージが自動的に削除され始めますか?

答えて

1

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

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

解決策を決定したら、ここにアップデートを投稿してください - この問題にどのように対処するのかを知りたいと思っています。ありがとう!

+0

あなたが示唆したように私たちは、古いメッセージを一掃するために追加のサービスを使用することに決めました。このスクリプトは1日1回実行され、1週間以上経過したキューから何かを削除します。将来的には段階的に廃止される予定であり、アプリケーションで独自のハウスキーピングを行うことになりますが、現在のところ、これは最も簡単で迅速なソリューションです。 – Nathan

3

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

+0

これは、MSMQだけでなく、すべてのメッセージング・システム(WebSphere * MQなど)に適用されます。 – Richard

+1

だから、私は 'キュー'ではなく 'MSMQキュー'と言った。 –

1

"とにかく私はメッセージが決して削除されないことに気がつきました。私たちのクライアントは絶対に明示的にそれらを削除することは決してありません。コンピュータ管理を見て、サーバが最後にリブートされたときのメッセージを見ることができます。

最後の再起動の前後にメッセージがない場合は、Expressというメッセージが表示されます。エクスプレスメッセージはRAMにのみ保存され、ディスクには保存されません。そのため、MSMQサービスを再起動すると、それらが破壊されます。これはおそらく、メッセージの量が決して重要なレベルに達していない理由です。

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

乾杯、 ジョンBreakwell(MSFT)

関連する問題