私の理解では、Celery は分散タスク キューです。つまり、Celery が行うべきことは、タスク/ジョブを他のサーバーにディスパッチして結果を取得することだけです。RabbitMQ はメッセージ キューであり、それ以上のものではありません。ただし、ワーカーは MQ をリッスンし、メッセージを受信したときにタスクを実行することができます。これにより、Celery が提供する機能が正確に実現されます。では、なぜ Celery が必要なのでしょうか。
ベストアンサー1
おっしゃる通り、Celery はまったく必要ありません。分散システムを設計する場合、選択肢はたくさんあり、すべての状況に適合する正しい方法というものはありません。
多くの人は、メッセージがキューに表示されるのを待機し、何らかの作業を実行し、作業が完了したらメッセージを送信するメッセージ コンシューマーのプールを用意する方が柔軟性が高いと考えています。
Celery は、多くのものをパッケージにまとめたフレームワークですが、パッケージ全体が必要ない場合は、RabbitMQ をセットアップして、複雑な操作をせずに必要なものだけを実装する方がよいでしょう。さらに、RabbitMQ は、Celery が実装するタスク キュー シナリオ以外にも、多くのシナリオで使用できます。
しかし、Celery を選択する場合は、RabbitMQ についてよく考えてください。Celery のメッセージ キュー モデルは単純化されており、RabbitMQ よりも Redis などの方が適しています。Rabbit には、Celery が基本的に無視する豊富なオプション セットがあります。