RabbitMq:使用 auto-ack=false 禁用预取 (prefetch_count=0)

RabbitMq: Disabling prefetching (prefetch_count=0) with auto-ack=false

是否可以通过 auto-ack=false 禁用预取?我只是想避免每次确认消息时都从队列中读取消息(预取)。我只想在调用 'consume_message' 时阅读消息。设置 prefetch_count=0 似乎不起作用,它被视为 'no specif limit'.

更新:
据我了解,'prefetch_count' 是客户端缓存的消息数(本地读入缓冲区)。例如有一个用例:

(假设我们连接到一个队列并且它有消息)

  1. 创建连接。
  2. 设置Basic.Qos (prefetch_count=1)
  3. 开始消费Basic.Consume
  4. 由于 prefetch_count=1 一条消息已经 传输到客户端 并准备好被读取并标记为 not-ack' d.
  5. 正在读取消息然后处理它。
  6. 然后消息被确认。一切都从 步骤 4.
  7. 开始

我认为将 prefetch_count 设置为 0 可以避免第 4 步,并且只有在您阅读消息时才会传输消息 - 客户端没有缓存。

预取和自动确认没有这样的关系。预取计数只是一些 未确认 准备发送给特定消费者的消息。

假设您将预取计数设置为 N。如果您将自动确认设置为真,这意味着这 N 条消息在接收时被确认。如果将其设置为 false,这意味着您仍然会收到 N 条消息,但在您手动确认之前它们不会被确认。

对于最后一部分 - 尝试将 prefetch_count 设置为 1。

同时检查这个 和两个答案。