如何检测陈旧的工人(或自动重启)

时间:2014-03-31 15:59:53

标签: django celery django-celery

我们最近遇到了芹菜框架的恶劣情况。队列中有很多消息,但是这些消息没有得到处理。我们重新启动芹菜,消息开始再次处理。但是,我们不希望这样的情况再次发生,并且正在寻找永久的解决方案。

看来芹菜的工人已经过时了。芹菜的文件记录了陈旧工人的以下内容:

  

这表明在任务队列中有2891条消息等待处理,有两个消费者在处理它们。

     

队列永远不会被清空的一个原因可能是您有一个陈旧的工作进程将消息作为人质。如果工人没有正确关闭,就可能发生这种情况。

     

当工作人员收到消息时,代理会在将消息标记为已处理之前等待确认消息。在消费者正常关闭之前,经纪人不会将该消息重新发送给其他消费者。

     

如果遇到此问题,则必须手动终止所有工作人员并重新启动它们

     

请参阅documentation

然而,这依赖于手工检查过时的工人,留下大量的错误空间并耗费手工劳动。什么是保持芹菜工作的好方法?

1 个答案:

答案 0 :(得分:0)

您可以使用类似管理员或类似管理员的工具来部署工作人员,请参阅Running the worker as daemon

此外,您可以使用rabbitmq-management监视队列状态,以检查队列是否变得太大,假设您正在使用RabbitMQ; celery monitoring还提供了一些监控机制