停止 Redis 后如何继续执行 celery 队列,然后再启动它?

Posted

技术标签:

【中文标题】停止 Redis 后如何继续执行 celery 队列,然后再启动它?【英文标题】:How to continue executing celery queue after stopping Redis and then starting it later? 【发布时间】:2020-08-26 16:26:14 【问题描述】:

我正在运行一个 Django 应用程序,该应用程序使用 Celery 并使用 Redis 服务器作为工作线程来运行异步任务。

我需要能够停止整个基础架构并将其恢复,而不会导致任务执行中断。 所以我需要这样做:

1) Stop the Django webservice
2) Stop celery
3) Shut down Redis daemon
4) Make a few changes in the server or move to a different machine
5) Start Redis daemon
6) Start Celery
7) Start the Django webservice

当整个基础架构再次备份时,它应该从中断的地方继续。也就是说,如果队列中有任何任务,它应该继续执行它们。

我该怎么做呢?有没有办法保存队列并稍后继续?

【问题讨论】:

查看这个答案***.com/a/56978911/6340775 【参考方案1】:

有没有办法保存队列并稍后继续?

是的。您的所有任务都保存在 Redis 中。如果您可以保持其运行,或导出/导入其数据,您将不会丢失任何任务。

如此广泛的 2 个选项。

选项 1:

    停止 Django 网络服务 停止芹菜 使用 RDB 将 redis 数据导出到快照 关闭 Redis 守护进程 在服务器中进行一些更改或移动到另一台机器 启动 Redis 守护进程 从快照中导入 redis 数据 开始芹菜 启动 Django 网络服务

更多关于 RDB:https://redis.io/topics/persistence

选项 2:

    停止 Django 网络服务 停止芹菜 在服务器中进行一些更改或移动到另一台机器 开始芹菜 启动 Django 网络服务

一直保持 redis 运行。

【讨论】:

“导出 redis 数据”是指转储 .rdb 文件的 redis SAVE 或 BGSAVE 之类的东西吧? RDB 看起来是一个更好的选择:redis.io/topics/persistence,我已据此更新了我的答案 谢谢。如果可行,我会尝试并将其标记为“已回答”。干杯!

以上是关于停止 Redis 后如何继续执行 celery 队列,然后再启动它?的主要内容,如果未能解决你的问题,请参考以下文章

Django 学习之Celery(芹菜)

芹菜 - 中间的子任务失败后有没有办法继续执行链

Celery 队列和 Redis 队列

在 Celery 中,我如何运行一个任务,然后让该任务运行另一个任务并继续执行?

如何查看Celery存储在redis里面的结果

celery 停止执行中 task