2016-03-30 1 views
0

ServiceControlで監視されるエラーキューに失敗したメッセージを転送するようにNServiceBusをセットアップしました。NServiceBus MessageForwardingInCaseOfFaultConfigが正常に動作しない

<section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" /> 
<MessageForwardingInCaseOfFaultConfig ErrorQueue="error" /> 

私が処理されることに失敗したメッセージを送信すると、それがDLQに送信されています:

は、ここに私の設定です。しかし、私はこのメッセージのコピーをerrorまたはerror.logキューに見つけることができません。 AMSのメッセージの詳細を見ると、Delivery Counterは7に設定されていますが、NSBログをチェックすると例外が1回しか見つかりません。また、なぜこの例外が "INFO"として記録されているのか、私は少し混乱しています。それはその方法を検出することをより困難にしますが、それは別個の関心事です。

注:私はAzure Service Bus Transportを実行しています。

誰かが私がここで逃しているアイデアですか? ありがとうございます!

+0

コードの関連ビットを投稿できますか? –

+0

申し訳ありませんが、xmlを「コード」としてマークしていたので、何とか無視されました。 – Laila

答えて

3

ハンドラがメッセージを処理しようとしているときにエラーが発生すると、メッセージが表示され、再び再試行されます。キューに設定された配信回数が少ない場合、メッセージは処理に失敗し、ASBはネイティブでDLQを行います。そのためメッセージはNSBの設定されたエラーキューではなく、ASB DLQで終了します。

DLQ-edメッセージに表示される情報は、それを確認しています。 default MaxDeliveryCount in NSB.ASB v5は6に設定されているため、ASBはそれ以上の処理を試みる瞬間にメッセージをDLQします。

これは、ASBが提供するネイティブDeliveryCountを使用していない独自の(インスタンス単位の)再試行カウンタを持つNSBが原因です。エンドポイントがスケールアウトされている場合は、ロールの各インスタンスがメッセージを取得して処理しようとするため、MaxDeliveryCountを調整する必要があります。各インスタンスは再試行カウンタを持ちます。その結果、インスタンスカウンタは6未満になる可能性がありますが、メッセージDeliveryCountがそれを超えます。

+0

これは意味があります。あまりにもありがとうSean、あなたはいつも大きな助けになっています! – Laila