さて、私はキュー->デッドレターキュー->デッドレターキューの毒サブキュー->?
さて、私が理解している限り、メッセージの処理に失敗した場合、またはメッセージに対するアクションが受信者によってサポートされていない場合、メッセージはポイズンキューに送信される可能性があります。 私が見つけた記事のほとんどは、メインサービスと同じ契約で毒サービスを実装することを示しています。契約が提供されたメッセージをサポートしていないというエラーが発生した場合、ポイズンメッセージキューに有毒なメッセージがポイズンメッセージキューに入れられませんか?
毒キュー内のすべてを処理できるハンドラーがある方が理にかなっていますか?以下は、おそらく安全ではない(そして完全にテストされていない)WCFメッセージを想定していますが、絶対確実な毒キュー処理を行う方法はありますか?待ち行列のエッジケースを考えれば考えるほど、すべての可能性を処理する完全なシステムを持つことは不可能だと感じます。
[OperationContract(IsOneWay = true, Action = "*")]
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void CatchAll(Message message)
{
// Log somewhere?
}
もう1つの考えは、すべてのメッセージをポイズンキューからデッドレターキューに戻して再度処理するトリガーを設定することです。これにより、おそらく再びポイズンが発生し、無限にループします。
具体的な質問は..デッドレターキュー内の毒メッセージをどのように処理するかということだと思います。そして、一般的な質問は、MSMQのすべての状況をどのように処理するのかということです。