【问题标题】:How to persist a Celery queue in a database如何在数据库中持久化 Celery 队列
【发布时间】:2019-08-29 11:11:09
【问题描述】:

transient queues 下的 Celery 文档状态:

Celery 创建的队列默认是持久的。这意味着broker会将消息写入磁盘,以确保即使broker重启也能执行任务。

加上临时文件系统的额外关注,如何确保主机重启后队列恢复并清除文件系统?

或者类似地,我怎样才能将 celery 队列持久化到数据库中?

【问题讨论】:

    标签: database queue celery resume


    【解决方案1】:

    我建议使用具有内置高可用性的代理。集群模式下的 Redis 是一个不错的选择,SQS 或 RabbitMQ 也是如此。

    【讨论】:

    • 这是否意味着应用程序需要在多个节点上复制?虽然这听起来更高效,但我正在寻找最简单的解决方案,因此正在考虑将队列保留在数据库中。
    • 您可能有一个或多个节点供您的工作人员使用——这绝对没问题。我们在这里谈论的是经纪人,而不是工人。
    • 所以如果我理解正确,经纪人,例如Redis,在内存中保存一个副本,在一个单独的服务中运行,然后如果在磁盘上持久化队列的 celery 节点出现故障,代理将把副本保存在内存中,一旦 celery 节点被重新写入队列又起来了。代理的高可用性只是降低了 celery 节点和代理都关闭的可能性。我正确理解了吗?
    • 在集群模式下,Redis保存在内存中的数据会复制到所有节点上,所以在一个节点崩溃的情况下,另一个节点会成为master继续运行。经纪人的 HA 减少了您丢失任务的可能性。即使所有节点都关闭,并且您运行新节点,它们也会开始选择队列中的内容来运行。但是,它与节点(工人)无关。它们有自己的生命周期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多