2012-01-31 94 views
32

從我的理解來看,Celery是一個分佈式任務隊列,這意味着它唯一應該做的就是將任務/作業分派給其他服務器並將結果返回。 RabbitMQ是一個消息隊列,僅此而已。但是,工作人員只能在收到消息時收聽MQ並執行任務。這實現了Celery所提供的功能,所以爲什麼需要Celery?爲什麼要用芹菜代替RabbitMQ?

回答

31

你是對的,你根本不需要芹菜。當你設計分佈式系統時,有很多選擇,沒有正確的方法去做適合所有情況的事情。

許多人發現消息消費者池等待消息出現在隊列中,做一些工作並在工作完成時發送消息會更靈活。

Celery是一個將一大堆東西封裝在一個包中的框架,但是如果你不需要整個包,那麼最好是設置RabbitMQ並且實現你所需要的而沒有任何複雜性。另外,除了Celery實現的任務隊列場景外,RabbitMQ還可以用於更多場景。

但是如果你確實選擇了芹菜,那麼再考慮一下RabbitMQ。 Celery的消息排隊模型非常簡單,它對於Redis而言比RabbitMQ更適合。兔子擁有豐富的選項,而芹菜基本上忽略了這些選項。

+2

「兔子有一套豐富的選項,西芹基本上忽略了」。這是事實,但有點誤導。例如,您可以在Rabbit層設置不受Celery控制的路由規則,但會影響Celery任務的路由和使用。這是一個設計問題,無論您是希望路由由調用者,Celery自定義路由器還是交換機制來處理。確實,這些兔子配置可以對Celery「隱形」,但這並不意味着它們沒有有用的效果。 – 2013-08-26 19:05:20

21

芹菜基本上提供了一個很好的界面來做你剛剛說的,併爲你處理所有的配置。是的,你可以親手做,但你只需重寫芹菜。

+5

還有操作元素。 Celery的巨大部分在於可靠性(例如,當特定的例外序列化等時不會崩潰),以及管理工作人員和工作人員羣。 – asksol 2012-01-31 12:21:51