问题描述
偶尔(阅读:太频繁)我的 celery 设置会丢弃任务。我正在 celery 4.x
上运行最新的 Django 1.11
,并为队列和结果使用 redis
后端。
我不知道任务被删除的确切原因,但我怀疑一个工作人员正在开始工作,然后由于某种原因(自动缩放操作、重新部署、内存不足...... ) 并且工作在中间被杀死。
所以我的问题是:
- 我如何监控这种事情?我使用了
celerymon
,但任务并未报告为失败,但我在我的数据库中没有看到我怀疑失败的任务所期望的数据。 - 如何让
celery
重试此类任务而不用数据库中的标志实现我自己的“假队列”? - 我如何使
celery
总体上更加强大和可靠?
感谢您的指点!
解决方法
你必须使用 RabbitMq 而不是 redis,我在 celery 文档中读到了这个(就在这里:https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#choosing-a-broker):
RabbitMQ 功能齐全、稳定、耐用且易于安装。这是一个 生产环境的绝佳选择。
Redis 也是功能完备的,但更容易受到数据丢失的影响 突然终止或电源故障的事件。
使用 rabbit mq,您在重启时丢失消息的问题必须消失。