2017-09-07 1 views
1

auto-ack = falseでプリフェッチを無効にすることはできますか?メッセージを確認するたびにキューからメッセージ(プリフェッチ)を読み取らないようにしたいだけです。私は 'consume_message'を呼び出すときにだけメッセージを読んでみたい。 prefetch_count = 0に設定すると機能しないようですが、「特定の制限はありません」と扱われます。RabbitMq:auto-ack = falseでプリフェッチを無効にする(prefetch_count = 0)

UPDATED:
「prefetch_count」は、クライアント側でキャッシュされたメッセージの数(バッファにローカルに読み込まれる)です。例えば、ユースケースがあります:

  1. は、接続を作成します(我々はに接続して、それがメッセージを持っているキューがあるとしましょう)。
  2. 設定Basic.Qosため= 1つのメッセージがすでにクライアントに転送し、読みとマークされる準備ができているprefetch_countにBasic.Consume
  3. を消費(prefetch_count = 1)
  4. スタートnot-ack'dとなります。
  5. メッセージを読んでそれを処理します。
  6. メッセージはack'dです。そして、すべてはのステップ4から始まります。

prefetch_countを0に設定すると、手順4が回避され、メッセージを読み取るときにのみ転送されると考えられました。クライアント側ではキャッシュされません。

答えて

0

プリフェッチと自動確認はそれほど関連していません。プリフェッチカウントは、の承認されていないのメッセージが特定のコンシューマに配信されるように単純に設定されています。

プリフェッチカウントをNに設定したとします。auto-ackをtrueに設定すると、これらのN個のメッセージが受信時にACKされることを意味します。これをfalseに設定すると、N個のメッセージがまだ得られますが、手動でACKするまでACKは返されません。最後の部分については

- また、このquestionとの両方の答えを確認する1.

にprefetch_countを設定してみてください。

+0

Hm ...ドキュメントでは、[リンク](https://www.rabbitmq.com/amqp-0-9-1-reference.html): 'no-ackオプションが指定されている場合、prefetch-countは無視されます設定されています。そして、今はっきりしていない - クライアントが消費するメッセージの数は? – eSZet

+0

私の質問を更新しました。見てください – eSZet

+0

あなたが私に提案したこと(auto-ack = falseとprefetch_count = 1)は、問題の更新された部分の正確な使用例です。しかし、重要なのは、私が避けたいステップ4です。 prefetch-countを0に設定すると、カウントが指定されていないことになります。私はそれがはっきりしていることを望む – eSZet

関連する問題