【问题标题】:Why use Celery instead of RabbitMQ?为什么使用 Celery 而不是 RabbitMQ?
【发布时间】:2012-02-23 01:30:12
【问题描述】:

据我了解,Celery 是一个分布式任务队列,这意味着它唯一应该做的就是将任务/作业分派到其他服务器并取回结果。 RabbitMQ 是一个消息队列,仅此而已。但是,worker 可以只监听 MQ 并在收到消息时执行任务。这完全实现了 Celery 提供的功能,那么为什么还需要 Celery?

【问题讨论】:

    标签: python message-queue rabbitmq celery


    【解决方案1】:

    Celery 基本上提供了一个很好的界面来执行您所说的操作,并为您处理所有配置。是的,您可以手动完成,但您只是在重写 celery。

    【讨论】:

    • 还有操作元素。 Celery 的很大一部分是为了可靠性(例如,当特定异常被序列化时不会崩溃等),以及管理工人和工人集群。
    【解决方案2】:

    你是对的,你根本不需要 Celery。当您设计一个分布式系统时,有很多选择,并且没有适合所有情况的正确方法。

    许多人发现让消息消费者池等待消息出现在他们的队列中、做一些工作并在工作完成后发送消息会更加灵活。

    Celery 是一个框架,它将很多东西封装在一个包中,但如果你真的不需要整个包,那么最好设置 RabbitMQ 并实现你所需要的,而不需要所有的复杂性。另外,除了Celery实现的任务队列场景,RabbitMQ还可以用在更多的场景中。

    但是,如果您确实选择了 Celery,那么请三思而后行 RabbitMQ。 Celery 的消息队列模型非常简单,它确实更适合 Redis 之类的东西而不是 RabbitMQ。 Rabbit 有很多 Celery 基本上忽略的选项。

    【讨论】:

    • “Rabbit 有很多 Celery 基本上忽略的选项”。这是真的,但有点误导。例如,您可以在 Rabbit 层中设置不受 Celery 控制但会影响 Celery 任务的路由和消耗的路由规则。无论您希望路由由调用者、Celery 自定义路由器还是交换机制来处理,这是一个设计问题。确实,这些 Rabbit 配置对 Celery 来说是“不可见的”,但这并不意味着它们没有有用的效果。
    【解决方案3】:

    在我看来,与RabbitMQ相比,将celery与flower和其他监控包集成起来很容易。

    这一切都取决于用例...

    如果您不需要 celery 提供的其他功能,RabbitMQ 将是一个简单的出路。权衡您的选择并不是一个坏主意...

    【讨论】:

      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2021-09-12
      • 2015-11-25
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多