我需要构建一个处理两种类型任务的系统。一种类型可以创建自己或另一种类型的更多任务。工作人员很少(2-3人),只有一名主持人。最重要的要求是系统应该优雅地处理重新启动:即在重新启动时,正在进行的任务应该从头开始,工作人员应该拿起重新启动前排队的任务。看看Celery,它似乎适合这个用例。然而,我有几个问题:
1) Celery是否能够按照描述处理整个系统的重新启动?(芹菜+工人+经纪人,一切重启,完全停电)。
2) 在这种情况下,最佳的代理是什么?我更喜欢SQLAlchemy+SQLite,因为它更"自给自足",但如果RabbitMQ是正确的选择,考虑到优雅地处理完全重启的要求,那么我可以使用它。
1)Celery是否能够按照描述处理整个系统的重新启动?(芹菜+工人+经纪人,一切重启,完全停电)。
是,当您在RabbitMQ上创建自己的队列时(Persistent队列),即使在重新启动服务器后,该任务也将恢复并将由Celery执行。
2)在这种情况下,最好使用什么代理?我更喜欢SQLAlchemy+SQLite,因为它更"自给自足",但如果RabbitMQ是正确的选择,考虑到优雅地处理完全重启的要求,那么我可以使用它。
USe RabbitMQ。我们在生产中使用RabbitMQ+芹菜。所以我会建议您使用RabbitMQ作为代理。
芹菜+拉比MQ最佳实践
消息可靠性
注:
- 使用更多队列(即,不仅仅是默认队列)
- 使用优先工作者
- 使用Celery的错误处理机制