1

parentWorker に送信されたペイロードの場合:

  1. 他のワーカー間で作業を分割し、parentWorker の taskId を追加のプロパティとしてペイロードに追加します。
  2. 他の各ワーカーは、自分が担当することを完了します

私が知りたいのは、5 または 10 または 20 の他の Worker がキューに入れられた/キックオフされた場合、それらがすべて終了するのはいつですか? それらがすべて終了したら、ワークフローの次の部分である nextWorker を開始したいからです。

したがって、理想的なパイプラインは次のとおりです。parentWorker > X # of otherWorkers > everyone done? > nextWorker

どうすればこれを実現できますか?

ポーリングベースのソリューションで回答しないでください。私はそれを探していません。

私はキャッシュを使用することを考えました:

  1. ここで、parentWorker は、次のように、作成される otherWorker の合計数を設定します。cachekey_<parertTaskId>_workersCreated: 10
  2. その場合、他のワーカーは終了後に # をアトミックに -1 ずつ減らし、最終的にカウントはゼロになります:cachekey_<parertTaskId>_workersCreated: 0しかし、そのカウントに基づいて行動するのは誰ですか?

a) アイデアが otherWorkers に減分させることである場合、値をチェックし、それがゼロかどうかを確認し、nextWorker を開始します ... 次のような状況では欠陥があります:

cachekey_<parertTaskId>_workersCreated: 2
otherWorker9 sends -1
otherWorker10 sends -1
otherWorker9 checks and otherWorker10 checks
both get back 0 and both will kick off nextWorker! We only wanted one instance.

b) その他の悪い考え:

cachekey_<parertTaskId>_workersCreated: 2
otherWorker9 checks and otherWorker10 checks
neither one kicks off nextWorker because value!==1
otherWorker9 sends -1
otherWorker10 sends -1
its over and noone is left to act on cachekey_<parertTaskId>_workersCreated: 0
4

1 に答える 1