Broker介绍

Broker概览

这个表格对比了不同传输方式,更多信息请参考每种方式的独立介绍文档

名称 状态 有无监控 支持远程控制
RabbitMQ 稳定支持
Redis 稳定支持
Amazon SQS 稳定支持
Zookeeper 试验性支持

试验性支持代表也许可以运行,但没有专门的维护人员 。

没有监控代表配套的如插件Flower, celery events, celerymon等基于事件监听的监控工具无法使用。

远程控制表示使用celery inspect或者celery control命令或其他工具运行时发现和管理workers的能力。

主要内容

注意:这部分只列举了一部分支持的backends 和 brokers

Celery能够借助很多不同的backends(结果存储)和Brokers(消息传输)来搭建服务。

Redis

Redis既可以充当backend,也能充当broker。

当作Broker:Redis非常适合传输短消息,但不适用于长消息。详情参照文档

当作Backend:Redis 是一个非常快的KV存储,它可以十分高效的存取任务结果。但由于它的实现原理,你需要考虑容量限制的问题,以及结果持久化。如果结果持久化很重要,不建议使用redis。

RabbitMQ

RabbitMQ可以用作broker。

作为Broker:在长消息方面,RabbitMQ更有优势,但如果消息来的非常快,拥有水平扩容能力的Redis或者SQS更有优势。详情参照文档

作为Backend:RabbitMQ也能通过 npc://backend存储信息,这种方式用于为每个客户端创建单独的临时队列。

注意:RabbitMQ(作为Broker)和Redis(作为Backend)是非常常见的一种组合;如果结果存储需要更有保证的长期持久性,考虑使用PostgreSQL或MySQL(通过SQLAlchemy), Cassandra或自定义Backend。

SQS

SQS用作Broker。

如果你已经集成了AWS,并且非常熟悉SQS,那么它将是一个非常合适的Broker选型。它具有极强的可扩展性和完全可管理性,并且拥有RabbitMQ类似地管理任务委派功能。但它缺少RabbitMQ的一些特性,比如worker远程控制命令。

详情参考文档。

SQLAlchemy

SQLAlchemy用作Backend。

它允许Celery集成MySQL、PostgreSQL、SQlite等ORM,使用SQL DB作为Backend。

详情参考文档。