django-celeryを使い始めたばかりで、celeryd をデーモンとして実行したいと考えています。ただし、手順は、一度に 1 つのサイト/プロジェクトに対してのみ構成できることを示唆しているようです。celeryd は複数のプロジェクトを処理できますか、それとも 1 つだけを処理できますか? また、この場合、構成ごとに celeryd を自動的に開始するようにセットアップするクリーンな方法はありますか?
2 に答える
すべての興味深い質問と同様に、答えは依存します。:)
2 つの独立したサイトで celeryd を使用できるシナリオを考え出すことは間違いなく可能です。複数のサイトが同じ取引所にタスクを送信しており、タスクが特定のデータベースへのアクセスを必要としない場合 (たとえば、電子メール アドレス、クレジット カード番号、またはデータベース レコード以外のもので動作する場合)、1 つの celeryd が可能性があります。十分であること。タスク コードが、すべてのサイトとセロリ サーバーによって読み込まれる共有モジュールにあることを確認してください。
ただし、通常、セロリはデータベースにアクセスする必要があります。タスク パラメーターとして渡された ID に基づいてオブジェクトをロードするか、データベースに変更を書き込む必要があるか、ほとんどの場合、その両方が必要です。 . また、複数のサイト/プロジェクトが同じアプリを共有していても、通常はデータベースを共有しないため、タスク キューを別々に保つ必要があります。
その場合、通常は、複数の交換で単一のメッセージ ブローカー (RabbitMQ など) をセットアップすることになります。各交換は、1 つのサイトからメッセージを受信します。次に、各交換のどこかで 1 つ以上の celeryd プロセスを実行します (celery 構成設定で、交換を指定する必要があります。celeryd が複数の交換をリッスンできるとは思いません)。各 celeryd サーバーは、交換、ロードするアプリ、接続先のデータベースを認識しています。
これらを管理するには、cymeを調べることをお勧めします。これは @asksol によるもので、必要に応じて複数のサーバーで複数の celeryd インスタンスを管理します。試したことはありませんが、インスタンスごとに異なる構成を処理する必要があるようです。