Celery任务可以重启吗?

Ste*_*n D 9 celery

我需要构建一个处理两种类型任务的系统.一种类型可以创建更多自己或另一种类型的任务.工人很少(2-3),只有一个主人.最重要的要求是系统应该优雅地处理重新启动:即在重新启动时,正在进行的任务应该从头开始,工作人员应该选择在重新启动之前排队的任务.看看芹菜它似乎适合这个用例.但是,我有几个问题:

1)Celery能否按照描述处理整个系统的重启?(芹菜+工人+经纪人,一切都重新启动,完全停电).

2)在这种情况下使用的最佳代理是什么?我更喜欢SQLAlchemy + SQLite,因为它更"自包含",但如果RabbitMQ是正确的选择,考虑到要求优雅地处理完全重启,那么我可以继续使用它.

bac*_*ack 15

1)Celery能否按照描述处理整个系统的重启?(芹菜+工人+经纪人,一切都重新启动,完全停电).

是的,即使在重新启动服务器后,在RabbitMQ(持久队列)上创建自己的队列时,任务也将恢复,并由Celery执行.

2)在这种情况下使用的最佳代理是什么?我更喜欢SQLAlchemy + SQLite,因为它更"自包含",但如果RabbitMQ是正确的选择,考虑到要求优雅地处理完全重启,那么我可以继续使用它.

使用RabbitMQ.我们正在使用RabbitMQ + Celery进行生产.所以我建议你使用RabbitMQ作为经纪人.

Celery + RabbitMQ最佳实践

消息可靠性

备注:

  1. 使用更多队列(即不仅仅是默认队列)
  2. 使用优先工作者
  3. 使用Celery的错误处理机制

  • 谢谢。我将使用 Celery + RabbitMQ 构建它,并具有持久队列和持久交换。 (2认同)