0

RabbitMQ キューからのメッセージを消費する基本的な実装が与えられた場合、MessageListener処理中にスローされる可能性のある例外の種類に基づいて、メッセージを別の配信不能キューに送信するにはどうすればよいですか?

メッセージが最初に公開されたキューにはx-dead-letter-exchangex-dead-letter-routing-keyが設定されていますが、私の場合はこれだけでは不十分です。

念のために言うと、私のアプリケーションは Spring 4 と Spring Amqp を使用しています。

4

1 に答える 1

0

RabbitMQ のドキュメントと Spring AMQP を理解している限り、コード内から条件に基づいて異なる DLQ にメッセージを送信することはできません。私がこれを言う理由は、コードのデバッグからの私の理解は、メッセージを DLQ に送信する必要がある場合、コードは交換またはルーティング キーを指定せず、RabbitMQ はメッセージが発行されたときに定義されたものを使用するということです。

したがって、私が見つけた唯一の解決策は、次のようなものを実装することです。

try { try_to_do_useful_stuff(message); } catch (BusinessException e) { resend_the_message_to_business_dlq(message); }

このようにして、ビジネス例外がスローされた場合、メッセージはビジネス DLQ に手動で送信されます。もちろん、元のキューなどの一部の詳細は失われますが、それらが使用されていない場合、これは問題ではありません。

ビジネス以外の例外がスローされると、標準パスに従います。再試行 (構成されている場合) してから、定義された DLQ にルーティングします。

于 2014-04-09T08:33:54.793 に答える