【问题标题】: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2013-11-20
      相关资源
      最近更新 更多