Celery:什么时候应该选择 Redis 作为 RabbitMQ 的消息代理?

Celery: When should you choose Redis as a message broker over RabbitMQ?

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

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

我最近(2017-2018 年)都使用过,它们在 Celery 4 上都非常稳定。因此您的选择可以基于您的托管设置的详细信息。

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

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


2019 年更新

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

Redis 代理在不同队列之间以公平的循环方式将任务分配给工作人员。兔子总是先进先出。对我来说,公平的循环赛更可取,我都试过了。不过,兔子似乎更稳定一些。