如何在停止Redis然后稍后启动它后继续执行芹菜队列?

Vin*_*nay 5 django task-queue redis celery django-celery

我正在运行一个 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
Run Code Online (Sandbox Code Playgroud)

当整个基础设施再次备份时,它应该从停止的地方继续。即如果队列中有任何任务,它应该继续执行它们。

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

ved*_*ant 5

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

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

如此广泛的2个选项。

选项1:

  1. 停止 Django 网络服务
  2. 停止芹菜
  3. 使用 RDB 将 redis 数据导出到快照
  4. 关闭Redis守护进程
  5. 在服务器中进行一些更改或移动到不同的机器
  6. 启动Redis守护进程
  7. 从快照导入redis数据
  8. 开始芹菜
  9. 启动 Django 网络服务

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

选项 2:

  1. 停止 Django 网络服务
  2. 停止芹菜
  3. 在服务器中进行一些更改或移动到不同的机器
  4. 开始芹菜
  5. 启动 Django 网络服务

一直保持redis运行。