2012-12-05 6 views
9

MSMQバージョン4を使用しており、トランザクションキューを使用しています。私は着信メッセージのキューを聴くためにWCFを使用しています。WCFを使用してトランザクションMSMQでメッセージを明示的にマークする方法

処理中に、サードパーティのコンポーネントに依存することがあります。これは、失敗する可能性があります。これを補うために、MSMQ 4(http://msdn.microsoft.com/en-us/library/aa395218.aspx)の毒メッセージ処理機能を使用して、メッセージを再試行します。x回の回数yの待機時間です。

しかし、状況によっては、入力メッセージが無効/中毒であることがわかります。これが発生すると、例外をスローすると、すべてのリトライと待機時間を持つ他のすべてのメッセージと同様に、メッセージが毒メッセージ処理ルーチンに従います。しかし、メッセージが中毒であることがわかったときは、再試行してポイズンキューによって処理されるように設定された時間待機する理由はありません。

メッセージを被毒していると明示的にマークする方法はありませんので、設定された再試行フローに従わずにすぐにポイズンキューに移動しますか?

+0

私はまったく同じ問題を抱えています。 – Leon

+0

@ Reon実際、解決策はまだ見つかりませんでした。 – Leo

+0

私はMSMQの初心者です。私はこれを試しませんでした - 申し訳ありませんが、愚かな場合。 "ポイズンキューはメインキューのサブキューであり、" poison "という名前でMSMQによって自動的に生成されます。このキューにアクセスするには、メインキュー名の後に" ;およびサブキュー名(この場合は「poison」) ポイズンメッセージを検出してメインキューから削除し、手動でポイズンキューに送信できませんでしたか? –

答えて

0

このような場合、DBに要求データを格納し、例外をスローしないようにして、WCFメッセージが正常に処理され、キューから削除されるようにします。

このデータは、必要に応じて後で処理することができます。モニタ/ポイズンキューを管理するよりDBからデータを処理するのは簡単です。

メッセージの次の処理タイムスタンプを決定でき、スレッドがDBからそのようなメッセージを再処理できるということに基づいて、いくつかの設定を行うことができます。

関連する問題