spe*_*ane 15 rabbitmq celery django-celery
我在rabbitmq上使用芹菜.我已经向队列发送了数千条消息,并且它们正在被成功处理,一切正常.但是,几个rabbitmq队列中的消息数量正在增长(队列中有数十万个项目).队列命名celeryev.[...](见下面的截图).这是恰当的行为吗?这些队列的目的是什么,不应该定期清除它们?有没有办法更频繁地清除它们,我认为它们占用了相当多的磁盘空间.

对于遇到celeryev队列变得非常大并且威胁到rabbitmq服务器上的磁盘空间问题的其他任何人,请注意接受的答案!这是我的建议.只需在rabbitmq实例上发出以下命令:
rabbitmqctl set_policy limit_celeryev_queues "^celeryev\." '{"max-length":1000000}' --apply-to queues
Run Code Online (Sandbox Code Playgroud)
这将限制以"celeryev"开头的任何队列为1百万条目.我做了一些尝试用卡flower情况造成失控celeryev队列,并设置CELERY_EVENT_QUEUE_TTL/CELERY_EVENT_QUEUE_EXPIRES并没有帮助控制队列的大小.
在我的测试中,我开始了一个flower过程,然后是SIGSTOP,然后看着它的celeryev队列开始逃跑.这两种设置都没有帮助.我确认SIGCONT的flower过程会使队列迅速恢复为0.我不确定为什么这两个旋钮没有帮助,但它可能与RabbitMQ如何实现这两个设置有关.
首先,对应的Per-Message TTLCELERY_EVENT_QUEUE_TTL仅在每个队列条目上建立到期时间 - AIUI它不会自动从队列中删除消息以在到期时节省空间.其次,对应的队列TTLCELERY_EVENT_QUEUE_EXPIRES表示"......保证队列将被删除,如果至少在有效期内未使用".但是,我认为他们对"未使用"的定义可能过于严格,不能用于例如过度负荷,卡死或杀死的花朵过程.
编辑:不幸的是,这个建议的一个问题是,set_policy ... apply-to queues只会影响现有的队列,而花可以并将创建可能溢出的新队列.
小智 5
你只需要为你的芹菜设置一个配置。
如果你想避免 Celery 创建celeryev.*队列:
CELERY_SEND_EVENTS = False # Will not create celeryev.* queues
Run Code Online (Sandbox Code Playgroud)
如果您需要这些队列进行监控(例如 CeleryFlower),您可以定期清除它们:
CELERY_EVENT_QUEUE_EXPIRES = 60 # Will delete all celeryev. queues without consumers after 1 minute.
Run Code Online (Sandbox Code Playgroud)
解决方案来自这里:https : //www.cloudamqp.com/docs/celery.html
| 归档时间: |
|
| 查看次数: |
7335 次 |
| 最近记录: |