auto-ack = falseでプリフェッチを無効にすることはできますか?メッセージを確認するたびにキューからメッセージ(プリフェッチ)を読み取らないようにしたいだけです。私は 'consume_message'を呼び出すときにだけメッセージを読んでみたい。 prefetch_count = 0に設定すると機能しないようですが、「特定の制限はありません」と扱われます。RabbitMq:auto-ack = falseでプリフェッチを無効にする(prefetch_count = 0)
UPDATED:
「prefetch_count」は、クライアント側でキャッシュされたメッセージの数(バッファにローカルに読み込まれる)です。例えば、ユースケースがあります:
- は、接続を作成します(我々はに接続して、それがメッセージを持っているキューがあるとしましょう)。
- 設定Basic.Qosため= 1つのメッセージがすでにクライアントに転送し、読みとマークされる準備ができているprefetch_countにBasic.Consume
- を消費(prefetch_count = 1)
- スタートnot-ack'dとなります。
- メッセージを読んでそれを処理します。
- メッセージはack'dです。そして、すべてはのステップ4から始まります。
prefetch_countを0に設定すると、手順4が回避され、メッセージを読み取るときにのみ転送されると考えられました。クライアント側ではキャッシュされません。
Hm ...ドキュメントでは、[リンク](https://www.rabbitmq.com/amqp-0-9-1-reference.html): 'no-ackオプションが指定されている場合、prefetch-countは無視されます設定されています。そして、今はっきりしていない - クライアントが消費するメッセージの数は? – eSZet
私の質問を更新しました。見てください – eSZet
あなたが私に提案したこと(auto-ack = falseとprefetch_count = 1)は、問題の更新された部分の正確な使用例です。しかし、重要なのは、私が避けたいステップ4です。 prefetch-countを0に設定すると、カウントが指定されていないことになります。私はそれがはっきりしていることを望む – eSZet