2016-12-05 9 views
0

NServiceBusには、再試行を回避し、メッセージを自動的にエラーにルーティングするハンドラ内で例外をスローする(または何かを行う)キュー?NServiceBus内のエラーキューにメッセージを強制的に送信する例外をスローする方法

処理されるメッセージが正しく形成されているが、空の文字列のような無効な値を持つ場合、ユースケースがあります。この場合、再試行は決してメッセージの内容を変更しないので、再試行は無意味です。あなたは、具体的NServiceBus 6.0、またはそれ以前のバージョンのために、あなたはあなたの特定のバージョンに変更することができ、より一般的なrecoverability記事をカバーcustom recoverability policyを作成するためのAPIをチェックアウトする場合があります

マット

+0

これは、NServiceBusエラーハンドラの悪用であると個人的には言いたいと思います。エラーを自分で処理し、必要に応じて独自の監査証跡に記録する必要があります。あなたが佐賀を終わらせたいなら(それはあなたのように聞こえる)、完全なものとしてマークしてください。 – Archer

答えて

2

感謝NServiceBusの(NServiceBus 6.0より前は設定が簡単ではありませんでした)

しかし、最初は完全に無効な状態でこれらのメッセージがどのように入り込んでいるのか尋ねました。バリデーションとリカバリは技術的に別々の懸念事項です。検証ロジックはメッセージアセンブリと同様に共有することができ、送信側と受信側で実行できます。次に、メッセージがエラーキューに巻き込まれたときに実行する正しい処置は、予期しない状態の検証ロジックを更新することです。

私は、再試行が発生することを防ぐための機械を作る価値はないと主張します。ソースで問題をキャッチする検証を構築する方がよいでしょう。一度しばらくすると悪いメッセージが伝わるが、それはおそらく世界の終わりではないので、再試行を起こさせるだけだ。

+0

私は、メッセージ*がそこに到達すべきではないという前提に同意しますが、ハンドラを開発する際には仮定したくありません。複数のチームが働いている複雑なシステムでは、メッセージが正しく引き上げられるとは保証できません。 FLRやSLRのように世界の終わりではなく、ただ失敗するでしょうが、それは正しいことのように感じません。おそらく、カスタム復旧可能性ポリシーが答えです。私はもっと簡単な解決策を望んでいました。 –

+0

最も簡単な解決策は、失敗させることです。数回の再試行を省くカスタム回復機能はおそらくYAGNIです。 –