为什么要用芹菜代替RabbitMQ?
从我的理解来看,Celery是一个分布式任务队列,这意味着它唯一应该做的就是将任务/作业分派给其他服务器并将结果返回。 RabbitMQ是一个消息队列,仅此而已。但是,工作人员只能在收到消息时收听MQ并执行任务。这实现了Celery所提供的功能,所以为什么需要Celery?为什么要用芹菜代替RabbitMQ?
你是对的,你根本不需要芹菜。当你设计分布式系统时,有很多选择,没有正确的方法去做适合所有情况的事情。
许多人发现消息消费者池等待消息出现在队列中,做一些工作并在工作完成时发送消息会更灵活。
Celery是一个将一大堆东西封装在一个包中的框架,但是如果你不需要整个包,那么最好是设置RabbitMQ并且实现你所需要的而没有任何复杂性。另外,除了Celery实现的任务队列场景外,RabbitMQ还可以用于更多场景。
但是如果你确实选择了芹菜,那么再考虑一下RabbitMQ。 Celery的消息排队模型非常简单,它对于Redis而言比RabbitMQ更适合。兔子拥有丰富的选项,而芹菜基本上忽略了这些选项。
芹菜基本上提供了一个很好的界面来做你刚刚说的,并为你处理所有的配置。是的,你可以亲手做,但你只需重写芹菜。
还有操作元素。 Celery的巨大部分在于可靠性(例如,当特定的例外序列化等时不会崩溃),以及管理工作人员和工作人员群。 – asksol 2012-01-31 12:21:51
“兔子有一套丰富的选项,西芹基本上忽略了”。这是事实,但有点误导。例如,您可以在Rabbit层设置不受Celery控制的路由规则,但会影响Celery任务的路由和使用。这是一个设计问题,无论您是希望路由由调用者,Celery自定义路由器还是交换机制来处理。确实,这些兔子配置可以对Celery“隐形”,但这并不意味着它们没有有用的效果。 – 2013-08-26 19:05:20