RabbitMQ有太多不需要的队列

时间:2018-02-15 20:09:04

标签: django rabbitmq celery

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

在最近在生产服务器上部署之前,每件事情都运行良好,但在此之后,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可以正常工作,但几个小时又会出现同样的问题。

我真的很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

CELERY_RESULT_PERSISTENT = False

CELERY_IGNORE_RESULT = True

CELERY_TASK_IGNORE_RESULT = True

CELERY_TASK_RESULT_EXPIRES = 60 `