偶尔(阅读:太频繁)我的芹菜设置会放弃任务。我正在Django 1.11
上运行最新的celery 4.x
,并为队列和结果提供redis
后端。
我不知道为什么任务被丢弃,但我怀疑的是,一个工作人员正在启动一个工作,然后这个工作人员由于某种原因被杀死(自动缩放操作、重新部署、内存不足......),作业在中间被杀死。
此时,它可能已退出redis
队列,并且不会再次被拾取。
所以我的问题是:
- 我怎样才能监控这种事情?我使用
celerymon
,并且任务未报告为失败,但我在数据库中看不到我怀疑失败的任务所期望的数据。 - 如何在不实现自己的"假队列"的情况下重试此类任务
celery
并在数据库中使用标志? - 如何使
celery
总体上更加健壮可靠?
感谢您的任何指示!
你必须使用 RabbitMq 而不是 redis,我在芹菜文档中读到了这一点(就在这里:https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#choosing-a-broker):
RabbitMQ 功能齐全、稳定、耐用且易于安装。这是一个 生产环境的绝佳选择。
Redis 也是功能完整的,但更容易在 突然终止或电源故障的事件。
使用兔子mq,重新启动时丢失消息的问题必须消失。