RabbitMQ 不需要的队列太多



我正在使用带有RabbitMQ 3.6.14的celery 4.0.2,在连接到其中一台服务器上运行的rabbitmq服务器上配置了四个队列。

在最近在生产服务器上部署之前,一切都很好,但在那之后,RabbitMQ 生成了数千个不需要的队列,几个小时后,RAM 使用率变高(20G 或更高),芹菜日志从其他芹菜服务器miss heartbeat并停止工作。

查看/var/lib/rabbitmq/mnesia/<server_name>/queues显示数千个文件,rabbitmqctl list_queues显示这些文件:

... d143e25a2ffe4dbca881978d658739b1 1 6046df6f62bc422c981d416706fe4af2 1 4acc0d442fcd43a1b0ef379c370706b1 1 d24e24a680534e33a8572f38d29ea6cd 1 619f7c89b43c4400ad8bf4556ec968d6 1 ffa5a991910941d3a03b844f85880a26 1 41e66894e5c34ad5b32d3e4e6307138c 1 4dd03ac9171448759a7b964a91d7422b 1 24ff24e8fe074f5b979a9d4e4674ba08 1 16ff4b981c11422ca2d437a5fba05706 1 726271ce0ab04886acd7f59fd930dc82 1 c07a58e36fcd4623ae7c4210ef073bdf 1 ....

我从未创建过这些文件(手动或在代码中)。此外,删除所有mnesia/queues文件并重新启动 RabbitMQ 可以工作,但只能持续几个小时,并且再次出现相同的问题。

我真的很感激任何帮助。

我终于解决了这个问题。默认情况下,芹菜在任务完成后,会在以<id_of_the_task>命名的队列中生成任务的结果。默认情况下,此队列将保留 24 小时,就我而言,每分钟生成数千个任务,因此,数百万个持久队列(24 小时)。

因此,您可以将以下内容放在 django 项目的settings.py中(或者根据芹菜文档,在您的芹菜项目中celery.py)。

CELERY_RESULT_PERSISTENT = False

CELERY_IGNORE_RESULT = True

CELERY_TASK_IGNORE_RESULT = True

CELERY_TASK_RESULT_EXPIRES = 60`

相关内容

  • 没有找到相关文章