Celery / SQS任务重试没了-如何摆脱它?

时间:2018-06-20 01:18:45

标签: django celery amazon-sqs

我们已经为异步任务管理设置了Celery / SQS。我们正在为我们的框架运行Django。我们有一个芹菜任务,其中包含一个self.retry()。 Max_retries设置为15。重试正在发生,并且有指数级的退缩,并且需要182小时才能完成所有15次重试。

上周,此任务花了很多时间,我认为由于我们代码中的错误无法正确处理服务中断。它导致相同的芹菜任务以指数方式创建(重试?)。最终它耗尽了所有可用的内存,并且工作程序崩溃了。重新启动工作程序会导致几个小时后的另一个崩溃,因为所有这些任务(及其重试)都会不断重试并产生新的重试,直到我们再次用尽内存。最终,我们最终创建了将近60万个任务!

我们需要我们的工作人员忽略具有特定芹菜GUID的所有任务。理想情况下,我们可以永久摆脱它们。我本打算使用revoke(),但根据文档(http://docs.celeryproject.org/en/3.1/userguide/workers.html#commands),这仅适用于Redis和RabbitMQ,不适用于SQS。此外,当我在AWS控制台中转至SQS服务时,它显示的是正在运行的零消息,因此,好像我不能刷新它。

是否可以使用Celery任务ID从SQS删除或撤消特定消息?还是有解决此问题的另一种方法?显然,我们需要修复代码,以免再次陷入这种情况,但是首先,我们需要使我们的工作人员正常运行,因为如果没有它,我们的网站就会失去功能。谢谢!

0 个答案:

没有答案