为什么用芹菜代替RabbitMQ?


77

据我了解,Celery是一个分布式任务队列,这意味着它唯一要做的就是将任务/作业分派给其他服务器并返回结果。RabbitMQ是一个消息队列,仅此而已。但是,当收到消息时,工作人员可以只听MQ并执行任务。这恰好实现了Celery所提供的功能,那么为什么根本需要Celery?

Answers:


66

是的,您根本不需要芹菜。在设计分布式系统时,有很多选择,没有正确的方法来做适合所有情况的事情。

许多人发现,让消息使用方池等待消息出现在其队列中,进行一些工作并在工作完成后发送消息更为灵活。

Celery是一个框架,可以将很多东西包装在一个程序包中,但是如果您真的不需要整个程序包,那么最好设置RabbitMQ并在没有所有复杂性的情况下实现所需的功能。此外,除了Celery实施的任务队列方案外,RabbitMQ还可用于更多方案。

但是,如果您选择Celery,请再三考虑RabbitMQ。Celery的消息队列模型很简单,与Redis之类相比,它确实更适合Redis。Rabbit拥有Celery基本上忽略的丰富选项。


6
“兔子具有丰富的选项,而Celery基本上忽略了这些选项”。是的,但是有点误导。例如,您可以在Rabbit层中设置不受Celery控制的路由规则,但会影响Celery任务的路由和使用。是否要由呼叫者,Celery自定义路由器或交换机制来处理路由是一个设计问题。确实,那些Rabbit配置对于Celery而言是“不可见的”,但这并不意味着它们没有作用。
克里斯·约翰逊

30

Celery基本上提供了一个不错的界面来执行您所说的内容,并为您处理所有配置。是的,您可以手工完成,但是您将重写芹菜。


6
还有操作元素。Celery的大部分功能都是为了确保可靠性(例如,在序列化特定异常时不会崩溃),以及管理工作人员和工作人员群集。
asksol 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.