1

私は、RabbitMQ からのメッセージを処理できるワーカーに取り組んでいます。

ただし、これを達成する方法がわかりません。

メッセージを受信し、処理中にエラーが発生した場合、どうすればそのメッセージをキューの最後に入れることができますか?

nack または reject を使用しようとしていますが、メッセージは常に最初の位置に再配置され、他のメッセージはフリーズしたままです!

メッセージを最初の位置に配置する必要がある理由がわかりません。requeue や AllupTo などの他のオプションで「再生」しようとしていますが、どれも機能していないようです。

前もって感謝します!

4

2 に答える 2

1

ドキュメントには次のように記載されています。

メッセージは、requeue パラメーター (basic.recover、basic.reject、basic.nack) を備えた AMQP メソッドを使用して、または未確認のメッセージを保持している間にチャネルを閉じることによって、キューに戻すことができます。これらのシナリオのいずれかにより、RabbitMQ リリースが 2.7.0 より前のキューの後ろにメッセージが再キューイングされました。RabbitMQ リリース 2.7.0 から、再キューイングまたはチャネル閉鎖が存在する場合でも、メッセージは常に発行順にキューに保持されます。

リリース 2.7.0 以降では、キューに複数のサブスクライバーがある場合、個々のコンシューマーがメッセージの順序が正しくないことを観察する可能性があります。これは、メッセージを再キューイングする可能性がある他のサブスクライバーのアクションによるものです。キューの観点からは、メッセージは常に発行順に保持されます。

成功したメッセージを覚えておいてackください。そうしないと、キューから削除されません。

拒否されたメッセージをさらに制御する必要がある場合は、dead letter exchangesを検討する必要があります。

于 2016-12-29T03:00:55.737 に答える