1

MSMQ エンドポイントで WCF を使用しており、この質問で説明されている動作が見られます。基本的に、サービスは一度に 1 つのメッセージを処理するように調整されていますが、2 つのメッセージがキューから取得され、1 つがメモリに保持されているように見えますが、もう 1 つがメモリに保持されているようです。処理中です。

これは、何が起こっているかを監視する上で問題を引き起こします。どのジョブがキューにあり、どのジョブが処理されているかを示す監視ページがありますが、この動作により、ジョブがキューから取り出されたときに効果的に消える期間がありますが、まだ処理が開始されていません。MessageQueue.GetAllMessages()現在キューにあるメッセージのリストを取得するために使用しています。

私は MSMQ にはあまり詳しくありませんが、メッセージがキューから取り出されると、他のプロセスが削除しないように非表示としてマークされると思います。これらのメッセージを照会して、それらが何であるかを確認する方法はありますか?

4

2 に答える 2

1

特にメッセージの量が少なく、次のメッセージを取得するために戻る前に長時間実行されるプロセスを開始するメッセージ ハンドラーの場合、これがいかに煩わしいかがわかります。

ただし、意味的に言えば、メッセージが実際に処理されているキューから消えると、処理にメッセージが無期限にキャッシュされることがあります。

トランザクション キューを使用している限り、何らかの理由でサービスがなくなっても、隠しメッセージは削除されません。

これがあなたの質問に直接答えないことを理解してください。

于 2014-07-16T14:21:03.807 に答える