2

一部の操作をセロリタスクに委任するアプリケーションがあります。一部のパラメーターに応じて、操作は異なるワーカーによって実行される必要があります。キューを使用してこれを実装することを考えました。私の考えは次のとおりです。

  1. クライアントは特定のメッセージからアクションを要求しますqueue1
  2. worker1(専任責任者queue1) が既にアクティブな場合、要求を処理します。
  3. ワーカーがリッスンしていない場合はqueue1、キャッチオール ワーカー ( worker-main) がインスタンス化されますworker1。リクエストは に転送されworker1ます。
  4. worker1しばらく使用しないとシャットダウンします

私のセロリの理解は限られており、いくつか質問があります。

  1. worker-mainセロリに実装するにはどうすればよいですか? : これはすべてのキューをリッスンするワーカーですが、他のワーカーよりも優先度が低くなります。つまり、リクエストが他のワーカーによって取得されない場合にのみ機能します。
  2. はどのようにwoker-main作成しますworker1か? クリエーターになると、 ?よりも優先度が高く、worker1に関連付ける必要があります。queue1worker-main
  3. worker-mainからにリクエストを転送できますworker1か? 返信はクライアントに直接送信する必要があります。
  4. worker1シャットダウンできますか?

以下の画像で、実装しようとしているアーキテクチャのグラフィカルな説明を確認できます。

マルチワーカー

4

1 に答える 1

1

「workermain」と「worker1」を順次ワークフローでリンクして、「worker main」が常にステップ1としてジョブを処理するようにすることができますが、「worker1」がすでに稼働していることを検出した場合は、単に戻り、何もしません。

したがって、タスクは最初に「worker main」にヒットし、「worker main」は、worker1が実行されているサーバーの稼働状況をチェックし、そのサーバーが稼働していない場合は、サーバーをプルアップし、完全に稼働するのを待ってから戻ります。これは、 Celeryでリンクがどのように機能してシーケンシャルワークフローを作成するかを確認するためにテストした概念実証です。より現実的な経験を持つ人がより良いソリューションを持っている可能性があります。また、ワーカーの起動に失敗した場合のエラー処理も含まれています。

このアプローチにはキューの概念がないことに注意してください。さらに、パラメーターを区別する代わりに、worker1とworker2に異なるメソッド名を付けることができます。クライアントはパラメーターの解析を実行してから、実行するセロリメソッドを選択できます。

于 2012-11-28T01:41:07.930 に答える