RabbitMQ中的celeryev队列变得非常大

RabbitMQ中的celeryev队列变得非常大,rabbitmq,celery,django-celery,Rabbitmq,Celery,Django Celery,我在兔子身上用芹菜。我已经向队列发送了数千条消息,这些消息正在成功处理,一切正常。但是,多个rabbitmq队列中的消息数量增长非常大(队列中有数十万项)。队列名为celeryev.[…](见下面的屏幕截图)。这种行为恰当吗?这些队列的目的是什么?它们不应该定期清除吗?有没有办法更定期地清除它们,我认为它们占用了相当多的磁盘空间 芹菜使用celeryev前缀队列(和交换),您可以根据需要对其进行配置或完全禁用(Celery control disable_events)。您可以使用x-max-l

我在兔子身上用芹菜。我已经向队列发送了数千条消息,这些消息正在成功处理,一切正常。但是,多个rabbitmq队列中的消息数量增长非常大(队列中有数十万项)。队列名为
celeryev.[…]
(见下面的屏幕截图)。这种行为恰当吗?这些队列的目的是什么?它们不应该定期清除吗?有没有办法更定期地清除它们,我认为它们占用了相当多的磁盘空间


芹菜使用
celeryev
前缀队列(和交换),您可以根据需要对其进行配置或完全禁用(
Celery control disable_events
)。

您可以使用x-max-length队列声明参数限制RabbitMQ中的队列大小


您可以使用芹菜选项(仅适用于amqp),该选项将设置消息到期时间,之后将从队列中删除该消息。

对于任何其他因
celeryev
队列变得非常大并威胁rabbitmq服务器上的磁盘空间而遇到问题的人,请注意接受的答案!这是我的建议。只需在rabbitmq实例上发出以下命令:

rabbitmqctl set_policy limit_celeryev_queues "^celeryev\." '{"max-length":1000000}' --apply-to queues
这将把以“celeryev”开头的任何队列限制为100万个条目。我用卡住的
flower
实例进行了一些实验,该实例导致celeryev队列失控,设置/didnot有助于控制队列大小

在我的测试中,我启动了一个
flower
进程,然后停止它,看着它的celeryev队列开始跑掉。这两种设置都没有帮助。我确认,如果控制
flower
进程,队列将很快恢复为0。我不确定为什么这两个旋钮没有帮助,但这可能与RabbitMQ如何实现这两个设置有关

首先,对应的
芹菜事件队列\u TTL
只在每个队列条目上建立一个过期时间——AIUI在过期时不会自动将消息从队列中删除以节省空间。其次,对应于
芹菜事件队列\u EXPIRES
的语句表示“…如果队列至少在过期期间未使用,则保证该队列将被删除”。然而,我认为他们对“未使用”的定义可能过于严格,无法适用于超负荷、卡住或死花过程


编辑:不幸的是,这个建议的一个问题是
set\u策略。。。应用于队列
只会影响现有的队列,flower可以并将创建可能溢出的新队列。

您只需为芹菜设置配置

如果要避免芹菜创建
celeryev.*
队列:

CELERY_SEND_EVENTS = False # Will not create celeryev.* queues
如果出于监控目的需要这些队列(例如芹菜花),您可以定期清除它们:

CELERY_EVENT_QUEUE_EXPIRES = 60 # Will delete all celeryev. queues without consumers after 1 minute.

解决方案来自这里:

有没有办法减少或限制事件存储,而不是完全关闭它?您是否尝试过可以放在CELERYEV_OPTS中的--maxrate和--frequency参数(或其他?),我猜您是否能够使用--maxrate或--frequency选项@他说他的链接现在是死链接。你有更新的吗?是现在吗?