1
私は、コンシューマがキューから取得したメッセージを処理し、キューに再キューします。 FOO、バー、バズがメッセージですNabとRabbitMQの拒否
P => | foo | bar | baz | => C
:
は、私はこのような状況を持っている想像してください。
コンシューマがbaz
を読み取っても問題が発生する場合は、basic.reject
またはbasic.nack
(https://www.rabbitmq.com/nack.html)のいずれかを使用できます。これらの2つのコマンドのうちの1つを使用して、メッセージを再キューに入れる引数を渡します。
メッセージは以前と同じ位置に再キューされているため、次のメッセージは再びbaz
になります。
私はそれを再度キューが、キューの先頭に戻ってそれを送りたい:私は自分のアプリケーションのコードの一部の行で解決
P => | baz | foo | bar | => C
、より良い解決策が存在する場合、私は多分使用して、疑問に思いますRabbitMQのいくつかの機能を直接的にサポートします。
はい、私は昨日、全体のドキュメントを参照してください。これは私が探していたものではありませんが、私が探していたものは存在せず、デッドレターのキューは良い回避策になる可能性があります。 – xyzale
ここで、待ち行列(FIFO)は、正確に予想どおりに動作します。手動のackモードを使用しているので、スレッドは処理に失敗すると、ackを取得するまで待機し、ループで同じ位置に置こうとします。一方、悪いメッセージを何度も何度も処理することは理にかなっていません。 2〜3回再試行(spring-amqpには直接サポートがあります)しても失敗した場合は、後で悪いメッセージのパターンを分析してクライアントチームに直接手を差し伸べることができます。 – lambodar
は、失敗したメッセージにTTLを追加してDLXに入れることができるため、期限切れになると自動的にメインキューに移動します。 – lambodar