RabbitMq:使用auto-ack = false

时间:2017-09-07 10:08:55

标签: rabbitmq amqp

是否可以使用auto-ack = false禁用预取?我只是想在每次确认消息时避免从队列中读取消息(预取)。我只想在调用'consume_message'时才读取消息。设置prefetch_count = 0似乎不起作用,并将其视为“无特定限制”。

修订版


据我所知,'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,并且只有在您阅读时才会传输邮件 - 在客户端没有缓存。

1 个答案:

答案 0 :(得分:1)

预取和自动确认与此无关。预取计数只是准备传递给特定消费者的一些未确认消息。

假设您将预取计数设置为N.如果将auto-ack设置为true,则表示这些N条消息在接收时被确认。如果将其设置为false,这意味着您仍然可以获得N条消息,但在手动确认之前它们不会被确认。

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

同时检查此question和两个答案。