带有RabbitMQ的芹菜会创建太多队列

时间:2018-08-22 15:41:54

标签: rabbitmq celery django-haystack

在生产服务器上运行Django / Celery / RabbitMQ时,某些任务已正确发送和使用。但是,RabbitMQ在处理完成后开始用尽所有CPU。我相信这与以下报告有关。

RabbitMQ on EC2 Consuming Tons of CPU

在该线程中,建议设置以下配置值:

  • CELERY_IGNORE_RESULT
  • CELERY_AMQP_TASK_RESULT_EXPIRES

我在调用appl_async()时分叉并自定义了celery-haystack软件包以同时设置这两个值,但是似乎没有任何效果。

我认为Celery正在自动创建大量(每个任务一个)以uid命名的队列来存储结果。但是我似乎无法阻止它。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我自己有一天要研究这个问题。我认为您要解释的两个选项可以这样解释:

  • input:如果为CELERY_IGNORE_RESULT,则任务的结果将被忽略,因此它们不会返回您用Truedelay进行调用的任何内容。
  • apply_async:存储在结果后端中的结果的到期时间。您可以将此选项设置为合理的值,以便RabbitMQ可以删除过期的结果。

生成的许多队列仅用于存储结果。因此,如果您不想存储任何结果,可以从配置文件中删除CELERY_AMQP_TASK_RESULT_EXPIRES选项。

有一个愉快的一天!