【问题标题】:Celery: When should you choose Redis as a message broker over RabbitMQ?Celery:什么时候应该选择 Redis 作为消息代理而不是 RabbitMQ?
【发布时间】:2017-09-02 01:18:02
【问题描述】:

我的粗略理解是,如果您需要内存中的键值存储功能,Redis 会更好,但是我不确定这与分配任务有什么关系?

这是否意味着如果我们已经将 Redis 用于其他用途,我们应该将它用作消息代理?

【问题讨论】:

  • Celery 明确推荐使用 AMQP 而不是 Redis。我不会使用 Redis。
  • @Apero 虽然 Rabbitmq 的支持时间比 Redis 长(并且是默认设置),但两者都被列为稳定。无论哪种方式,我都没有看到明确的建议。但是,如果您有其他看法,我很想知道。 docs.celeryproject.org/en/master/getting-started/brokers/…
  • @DanilaGanchar 文章中提到:很明显,RabbitMQ 花费了 Redis 75% 的时间来添加消息和 86% 的时间来处理消息。为什么 Redis 更快?
  • 更新了文档中经纪人的链接:docs.celeryproject.org/en/stable/getting-started/…

标签: python django redis rabbitmq celery


【解决方案1】:

我最近(2017-2018 年)都使用了这两种方法,它们在 Celery 4 上都非常稳定。因此您可以根据托管设置的详细信息进行选择。

  • 如果您必须使用 Celery 版本 2 或版本 3,请使用 RabbitMQ。否则...
  • 如果您出于任何其他原因使用 Redis,请使用 Redis
  • 如果您在 AWS 上托管,请使用 Redis,以便您可以将托管 Redis 用作服务
  • 如果您讨厌复杂的安装,请使用 Redis
  • 如果您已经安装了 RabbitMQ,请继续使用 RabbitMQ

过去,我会推荐 RabbitMQ,因为它使用 Celery 比 Redis 更稳定、更容易设置,但我不再相信这是真的。


2019 年更新

AWS 现在有一个与 RabbitMQ 等效的托管服务,称为 Amazon MQ,它可以减少在生产中将其作为服务运行的麻烦。如果您对此和芹菜有任何经验,请在下面发表评论。

【讨论】:

  • 使用 Redis / python 3.7 / Celery 4.2 的一个烦恼是结果后端不起作用,因为 async 现在是 python 的一部分(参见 github.com/celery/celery/issues/4849 )——这应该用芹菜 4.3。我不知道这是否也会影响 RabbitMQ。
  • 不过,Celery 4.3 现已发布,所以这不再是问题——结果后端再次与 Redis 一起工作。
  • 您还可以将 Celery 与 Amazon SQS 一起使用,部署和运行非常简单
  • @JasonGenX SQS 支持是实验性的。我想知道不稳定/丢失的位是什么......
  • 现在Amazon MQ除了activemq还提供了rabbitmq brokers,我用过,效果很好。
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 2011-11-23
  • 2022-12-14
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
相关资源
最近更新 更多