2012-01-31 17 views
32

Dalla mia comprensione, Celery è una coda di attività distribuita, il che significa che l'unica cosa che dovrebbe fare è inviare attività/lavori ad altri server e ottenere il risultato. RabbitMQ è una coda di messaggi e nient'altro. Tuttavia, un lavoratore può semplicemente ascoltare l'MQ ed eseguire l'attività quando viene ricevuto un messaggio. Ciò consente di ottenere esattamente ciò che offre Celery, quindi perché è necessario il Celery?Perché utilizzare Celery anziché RabbitMQ?

risposta

31

Hai ragione, non hai bisogno del Celery. Quando si progetta un sistema distribuito ci sono molte opzioni e non esiste un modo giusto per fare cose che si adattino a tutte le situazioni.

Molte persone scoprono che è più flessibile avere pool di consumatori di messaggi in attesa che un messaggio venga visualizzato in coda, facendo un po 'di lavoro e inviando un messaggio quando il lavoro è finito.

Celery è un framework che racchiude un sacco di cose in un pacchetto ma se non si ha realmente bisogno dell'intero pacchetto, allora è meglio impostare RabbitMQ e implementare ciò di cui si ha bisogno senza la complessità. Inoltre, RabbitMQ può essere utilizzato in molti altri scenari oltre allo scenario della coda di attività implementato da Celery.

Ma se scegli Celery, pensa due volte a RabbitMQ. Il modello di accodamento dei messaggi di Celery è semplicistico ed è davvero più adatto per qualcosa come Redis che per RabbitMQ. Rabbit ha una ricca serie di opzioni che Celery fondamentalmente ignora.

+2

"Rabbit ha una ricca serie di opzioni che Celery fondamentalmente ignora". È vero, ma un po 'fuorviante. Ad esempio, puoi impostare le regole di routing nel livello Rabbit che non sono controllate da Celery, ma influenzano il routing e il consumo delle attività di Celery. È un problema di progettazione se si desidera che il routing venga gestito dal chiamante, da un router personalizzato Celery o dal meccanismo di scambio. È vero che quelle Confezioni di Conigli possono essere "invisibili" a Celery ma ciò non significa che non abbiano un effetto utile. –

21

Celery fornisce fondamentalmente un'interfaccia piacevole per fare solo quello che hai detto e si occupa di tutte le configurazioni per te. Sì, potresti farlo a mano, ma dovresti solo riscrivere il sedano.

+5

C'è anche l'elemento operazioni. Enormi parti di Celery sono lì per affidabilità (ad esempio non si blocca quando una particolare eccezione è serializzata, ecc.) E per la gestione dei lavoratori e dei cluster di lavoratori. – asksol

Problemi correlati