【问题标题】:How to detect stale workers (or auto-restart)如何检测过时的工作人员(或自动重启)
【发布时间】:2014-05-11 01:52:55
【问题描述】:

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

看来 celery 的工人已经过时了。 celery 的文档对陈旧的工人进行了以下说明:

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

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

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

如果你遇到这个问题,你必须手动杀死所有工作人员并重新启动他们

documentation

但是,这依赖于人工检查过时的工作人员,给错误留下了很大的空间,并且耗费体力劳动。什么是保持芹菜工作的好解决方案?

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

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

    另外,你可以用rabbitmq-management监控队列状态,检查队列是否变得太大,假设你使用的是RabbitMQ; celery monitoring也提供了一些监控机制

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多