设置自动在兔子和芹菜中为真



我使用的是芹菜和rabbitmq,但由于在队列中推送了几个任务,我的服务器内存利用率变得超过40%,这样兔子进一步不会接受任何任务。 所以我想删除那些已经执行的消息,但由于 rabbitmq 的持久行为,这些消息不会自动删除,所以我想设置一些配置,如 autoAck=True, 这样,如果消息是从芹菜中消耗的,它将从 RabbitMQ 队列以及我的服务器内存中删除。请解释我们如何做到这一点.

好的,虽然我不完全明白为什么你有这样的问题,但很清楚发生了什么。

  1. 发布者将消息任务放入队列
  2. 您的工作进程提取消息并对其进行处理
  3. 邮件实际上永远不会从队列中删除

当使用者未能确认消息的处理时,会发生此行为。 为了确认,如果您查看 RabbitMQ 管理插件,您将看到一大堆未确认的消息。它们将不可用于使用,但将继续保存在服务器上并占用磁盘空间和内存。

此外,如果您执行Basic.Recover,所有这些消息将被转储回队列中以再次处理。

此问题是由于使用者配置不正确造成的。有两种方法可以解决此问题:

  1. 您可以将使用者配置为自动确认(即在收到消息时自动确认消息)。这是在声明使用者(使用Basic.Consume)时完成的。编辑:看起来这可能是芹菜的默认行为。
  2. 您可以将工作进程配置为提交确认(使用Basic.Ack)。编辑:这是通过芹菜中的acks_late属性完成的。

相关内容

  • 没有找到相关文章