この機能は、RabbitMQ と少しのコードだけで簡単に再現できます。NServicebus に含まれているのは良いことですが、MassTransit で構築するのは簡単なはずです。
(注:私は数年間.NETを使用していないため、NSBとMTに関する私の知識は少しさびています...これは高レベルの回答のみで、コードはありません)
まず、デッド レター交換と有害なメッセージ キューを適切に構成する必要があります。https://www.rabbitmq.com/dlx.html
メッセージがエラーの原因であり、不良メッセージであることがわかったら、デッド レター エクスチェンジ (DLX) を介して送信するために、メッセージを拒否するか (リキューせずに) ナックすることができます。
メッセージが DLX を通過すると、次のような追加のプロパティがメッセージに追加されます。
- queue - 配信不能になる前にメッセージが入っていたキューの名前
- exchange - メッセージが公開された取引所 (メッセージが何度もデッド レターされている場合、これはデッド レター交換になることに注意してください)、
- routing-keys - メッセージが発行されたルーティング キー (CC キーを含むが、BCC キーを除く)。
もっとあるでしょうが、これらはあなたが注意を払いたいものです。メッセージのこれらのプロパティを調べることで、元のルーティング キーを使用して、元の交換を通じて元のメッセージを再送信できます。または、元の宛先キューに直接再送信することもできます...元のキューがもう存在しない可能性があるため、個人的には、交換を介して送信する方が良いと思います(システム構成、消費者が排他的なキューを作成するなどによって異なります)。
この情報があれば、機能セットを再作成することはそれほど難しくありません。rabbitmq は必要なすべての機能を提供します。それを利用するには、少しコードを書くだけです。