1

私はNServiceBusを使用していくつかの例を調べていますが、 MassTransitに同梱されることを望んでいる機能に出くわしました(無料のサービスであるため)。

この機能は、「汚染された」メッセージに基づいています。

システムのバグが原因で、これらのメッセージを処理できず、エラー キューに永久に残る場合。

NServiceBusには優れた機能があり、コードのバグを修正すると、エラー キュー内のメッセージを元の作業キューに「リダイレクト」して再配信できるようになります。

これは、NServiceBus 固有のツールであるReturnToSourceQueue.exeを使用して行われます。

MassTransit には、この種の問題に対する同様のツールがありますか?

または、できればRabbitMQを使用する別の回避策がありますか。

4

2 に答える 2

7

RabbitMQ を使用すると、キュー間でメッセージを簡単に移動できます。shovelプラグインをインストールすることにより、管理コンソールを使用して手動で行うことができます。

メッセージを移動する

また、RabbitMQ でスケジュールされたシャベルを作成し、そのスケジュールに応じてメッセージの移動を実行することもできます。運用スタッフは、Windows スケジュール タスク (または他のランダム スケジューラ) が、以前に失敗したメッセージを運用キューに戻すのと同じくらい危険なことをしているとはほとんど考えていないため、RabbitMQ でショベルが構成されているという可視性は非常に貴重です。 .

MassTransit が有害なメッセージを処理する方法については、このブログ記事を読むことをお勧めします: RabbitMQ を使用した MassTransit でのエラー処理

RabbitMQ に関するツールは、MSMQ が提供するどのツールよりもはるかに優れています。これが、本番キューイング用に MSMQ を完全に放棄した理由の 1 つです。

于 2015-08-01T16:05:32.880 に答える
2

この機能は、RabbitMQ と少しのコードだけで簡単に再現できます。NServicebus に含まれているのは良いことですが、MassTransit で構築するのは簡単なはずです。

(注:私は数年間.NETを使用していないため、NSBとMTに関する私の知識は少しさびています...これは高レベルの回答のみで、コードはありません)

まず、デッド レター交換と有害なメッセージ キューを適切に構成する必要があります。https://www.rabbitmq.com/dlx.html

メッセージがエラーの原因であり、不良メッセージであることがわかったら、デッド レター エクスチェンジ (DLX) を介して送信するために、メッセージを拒否するか (リキューせずに) ナックすることができます。

メッセージが DLX を通過すると、次のような追加のプロパティがメッセージに追加されます。

  • queue - 配信不能になる前にメッセージが入っていたキューの名前
  • exchange - メッセージが公開された取引所 (メッセージが何度もデッド レターされている場合、これはデッド レター交換になることに注意してください)、
  • routing-keys - メッセージが発行されたルーティング キー (CC キーを含むが、BCC キーを除く)。

もっとあるでしょうが、これらはあなたが注意を払いたいものです。メッセージのこれらのプロパティを調べることで、元のルーティング キーを使用して、元の交換を通じて元のメッセージを再送信できます。または、元の宛先キューに直接再送信することもできます...元のキューがもう存在しない可能性があるため、個人的には、交換を介して送信する方が良いと思います(システム構成、消費者が排他的なキューを作成するなどによって異なります)。

この情報があれば、機能セットを再作成することはそれほど難しくありません。rabbitmq は必要なすべての機能を提供します。それを利用するには、少しコードを書くだけです。

于 2015-07-31T15:08:09.303 に答える