当前位置: 首页 > 知识库问答 >
问题:

RabbitMq:禁用预取(预取计数=0),自动确认=false

夏侯野
2023-03-14

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

更新:
据我所知,“prefetch_count”是客户端缓存的消息数(本地读取到缓冲区)。例如,有一个用例:

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

  1. 创建一个连接
  2. 设置基本设置。Qos(预取计数=1)
  3. 开始吃基本的。消费
  4. 由于预回迁_count=1,一条消息已经传输到客户端,准备读取并标记为未确认。
  5. 阅读信息,然后进行处理
  6. 然后消息被确认,一切从第4步开始

我认为将prefetch_count设置为0可以避免第4步,并且只有在读取消息时才会传输消息——客户端没有html" target="_blank">缓存。

共有1个答案

端木存
2023-03-14

预回迁和自动确认不是这样的。预回迁计数只是准备发送给特定消费者的未确认消息的数量。

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

对于最后一部分,请尝试将预回迁计数设置为1。

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

 类似资料:
  • 我试图了解AMQP协议的一些方面。目前我有RabbitMQ项目并使用python pika库。所以问题是关于确认和消息预取。 > 假设我们有一个只有消费者的队列(确保这个队列被声明为独占的)。那么,我是否正确理解了:无论我使用ack标志还是不使用ack标志?无论如何,我不应该能够同时处理多条消息,而且没有其他消费者可以接收其他仍在排队的消息。最好不要打开确认,因为这可能会减少AMQP服务器的负载。

  • 我正在使用Spring AMQP与RabbitMQ一起工作。以下是我的配置: 正如您所看到的,prefetchCount是1000。 我想知道预取的消息是否在消费者中并行处理;也就是说,多个线程调用onMessage(消息消息)方法。或者消息是按顺序处理的;也就是说,一个线程迭代预取的消息,并以连续的方式调用每个消息的onMessage(消息消息消息)方法。 我应该注意到,处理的顺序对我来说并不重

  • 几周前,使用F2重构代码时没有得到任何确认。然而,几天后,使用F2在底部面板中打开一个“重构预览”选项卡。 直到我手动检查我想要重构的内容,并单击右上角的复选标记,重构才会完成。 我在网上或vscode设置中找不到任何内容。是否可以禁用此功能,以便重构像以前一样自动进行?

  • 我试图测试spring rabbitmq confirm callback的行为,根据api描述,如果通过consumer发送了任何否定确认,则confirm callback应该给出ack的false值,但在我的例子中总是给出true。即使我将消息发布到deleted队列,我也在confirm回调中获得了true值。请告诉我如何得到否定的承认。 下面是我如何创建RabbitTemplate be

  • 接收到do-new推送后,确认一个预订单 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 bk_state string get GET参数组,本组参数需要参与签名 是 object └id 预订单id 是 8601458771 number └state 预订状态,1=预订成功,-1=预订失败 是 1 n

  • 数据预取存储容器 (Data Store) 在服务器端渲染(SSR)期间,我们本质上是在渲染我们应用程序的"快照",所以如果应用程序依赖于一些异步数据,那么在开始渲染过程之前,需要先预取和解析好这些数据。 另一个需要关注的问题是在客户端,在挂载 (mount) 到客户端应用程序之前,需要获取到与服务器端应用程序完全相同的数据 - 否则,客户端应用程序会因为使用与服务器端应用程序不同的状态,然后导致