如何使 celery 在删除任务方面更加健壮?

问题描述

偶尔(阅读:太频繁)我的 celery 设置会丢弃任务。我正在 celery 4.x 上运行最新的 Django 1.11,并为队列和结果使用 redis 后端。

我不知道任务被删除的确切原因,但我怀疑一个工作人员正在开始工作,然后由于某种原因(自动缩放操作、重新部署、内存不足...... ) 并且工作在中间被杀死。

此时可能它已经退出redis 队列并且不会再次被拿起。

所以我的问题是:

  1. 我如何监控这种事情?我使用了 celerymon,但任务并未报告为失败,但我在我的数据库中没有看到我怀疑失败的任务所期望的数据。
  2. 如何让 celery 重试此类任务而不用数据库中的标志实现我自己的“假队列”?
  3. 我如何使celery总体上更加强大和可靠?

感谢您的指点!

解决方法

你必须使用 RabbitMq 而不是 redis,我在 celery 文档中读到了这个(就在这里:https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#choosing-a-broker):

RabbitMQ 功能齐全、稳定、耐用且易于安装。这是一个 生产环境的绝佳选择。

Redis 也是功能完备的,但更容易受到数据丢失的影响 突然终止或电源故障的事件。

使用 rabbit mq,您在重启时丢失消息的问题必须消失。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...