1

現在、キューイング システムに ActiveMQ を使用していますが、RabbitMQ に移行したいと考えています。ActiveMQ に属する私が使用している機能の 1 つは、再配信ポリシーです。これは、コンシューマーが現時点では処理できないためにメッセージを拒否することがありますが、後で再試行する必要がある場合があるため、再度キューに入れるためです。

現在、AMQP でメッセージを拒否すると、すぐにキューから取り出され、再試行されます。

RabbitMQ で、キュー、コンシューマー、またはメッセージの再配信ポリシーを指定する方法はありますか?

4

1 に答える 1

1

私もその行動に問題がありました。ドキュメントによると (私が覚えている限りでは、新しいバージョンでは何かが変更された可能性があります)、再キューイング後にメッセージがどこに配置されるかは明記されていません (未定と記述されていました)。私のテストケース (バージョン 2.8.2) では、いくつかのメッセージがキューの最後に置かれ、1 つのメッセージ (正確にはクライアントのプリフェッチから最初) が開始されました (そしてすぐに消費されました)。私たちのアプリケーションでは、これによりライブロックが発生しました。

メッセージのコピーをキューに発行し、既に配信されたトランザクションを 1 つずつ確認することでこれを回避できます (ただし、ドキュメントのトランザクションに関するセクションを注意深く読むことをお勧めします)。または、デッドレターを使用して一時的に処理できないメッセージを処理します。

于 2013-04-03T11:12:09.983 に答える