如何摆脱仍在 Celery / RabbitMQ 队列中的遗留任务?



我正在运行Django + Celery + RabbitMQ。修改一些任务名称后,我开始收到"未注册的任务"KeyErrors,即使在从 Django Celery Beat 的周期性任务表中删除使用此键的任务并重新启动 Celery worker 之后也是如此。即使在使用 --purge 选项运行后,它们仍然存在。

我怎样才能摆脱它们?

要清除这些任务中的最后一个,您可以使用旧的方法标头重新实现它们,但没有逻辑。

例如,如果您删除了该方法original并且现在收到错误

[ERROR/MainProcess] Received unregistered task of type u'myapp.tasks.original'

只需重新创建original方法,如下所示:

tasks.py

@shared_task
def original():
# keep legacy task header so that it is flushed out of queue
# FIXME: this will be removed in the next release
pass

在每个环境中运行此版本后,将处理任何剩余的任务(并且不执行任何操作)。确保已将它们从定期任务表中删除,并且不再被调用。然后,可以在下次部署之前删除该方法,并且问题不会再次出现。

这仍然是一种解决方法,最好能够单独查看和删除任务。

相关内容

  • 没有找到相关文章

最新更新