TLと言うことができ; DRは、複数の=真がいくつかのケースでは高速ですが、要件のような多くの慎重な簿記とバッチが必要です
消費者は、その消費者固有の単調増加IDを持つメッセージを取得します。 idは64ビットの数字です(実際には符号なし32ビットかもしれませんが、Javaでは長さがないため配信タグと呼ばれます)。プリフェッチは、コンシューマが受け取ったメッセージの中で、最も重要なメッセージです。
true
が複数ある最高の納品書をお受け取りになった時点で、消費者が未処理の納品書が少ない(小さい番号の)梱包されていないメッセージはすべて了承されます。明らかに、高いプリフェッチがある場合、これは各メッセージを確認するよりも高速です。
ここで、RabbitMQはコンシューマがメッセージ(受信していないメッセージ)を受信したことを知っていますが、すべてのメッセージが正しく消費されたかどうかはわかりません。したがって、以前のすべてのメッセージが消費されたことを確認することは、開発者の負担です。コンシューマはメッセージを順番に配信します(内部的にはクライアントがBlockingQueueを使用すると信じていますが)下流のライブラリ/クライアントによっては、メッセージが正しくない可能性があります。
これは実際には、メッセージを一度にまとめて(トランザクションやメッセージのグループを他のシステムに送信する)、確実にバッファリングする場合にのみ有効です。多くの場合、これはブロッキングキューを使用して行われ、キューを定期的に排除して一連のメッセージをダウンストリームシステムに送信します。
一方、各メッセージをリアルタイムでストリーミングする場合、実際にはこれを行うことはできません(つまりmultiple = false)。
グループ内のメッセージが悪い場合(たとえば、内部キューから削除されています...ウサギキューではない場合)、その悪いものを無効にしません。その場合、倍数= true
のいずれかを使用することはできません。
最後に、(時間の代わりに)一定量のメッセージをプリフェッチよりも待っていたら、無期限に待っています....良い考えではありません。あなたは時間を待つ必要があり、メッセージの数は<=
プリフェッチでなければなりません。
正しく見ると分かりますが、正しく使用するには、倍数= true
を正しく使用してください。
私はmultipleをtrueに設定すると、一度にいつ、どれだけ多くの時間を知ることができますか?それはapiだけが管理しているのでしょうか?それとも、その時点で準備が整っていることを確認していますか?それが事実なら、実際にはいくつかの反応を待たせたい場合、第2のケースは適切ではないでしょうか? – JeremyK
基本的な質問を申し訳ありません。私はAMQPの経験がなく、突然私はそれのパフォーマンスを向上させる必要があります:) – JeremyK
@JeremyK私は複数についてはわかりません、それは適切なユースケースを持っていたことはありません。これが本当に必要なものであることは確かですか?あなたは自動でACKを受け取ることはできませんか?処理を完了したらただちに1つずつACKを送ることはできませんか? – cantSleepNow