【问题标题】:How can I get rid of legacy tasks still in the Celery / RabbitMQ queue?如何摆脱仍在 Celery / RabbitMQ 队列中的遗留任务?
【发布时间】:2018-02-05 19:52:56
【问题描述】:
我正在运行 Django + Celery + RabbitMQ。在修改了一些任务名称后,我开始收到“未注册的任务”KeyErrors,即使在从 Django Celery Beat 的 Periodic tasks 表中删除具有此键的任务并重新启动 Celery 工作人员之后也是如此。他们persist 甚至在running with the --purge option 之后。
我怎样才能摆脱它们?
【问题讨论】:
标签:
django
rabbitmq
celery
django-celery
celerybeat
【解决方案1】:
要清除这些任务中的最后一个,您可以使用旧方法头重新实现它们,但没有逻辑。
例如,如果您删除了方法 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
在每个环境中运行此版本后,将处理所有剩余的任务(并且什么也不做)。确保您已将它们从 定期任务 表中删除,并且不再调用它们。然后,您可以在下次部署之前删除该方法,并且该问题不会再次出现。
这仍然是一种解决方法,最好能够review and delete the tasks individually。