parentWorker に送信されたペイロードの場合:
- 他のワーカー間で作業を分割し、parentWorker の taskId を追加のプロパティとしてペイロードに追加します。
- 他の各ワーカーは、自分が担当することを完了します
私が知りたいのは、5 または 10 または 20 の他の Worker がキューに入れられた/キックオフされた場合、それらがすべて終了するのはいつですか? それらがすべて終了したら、ワークフローの次の部分である nextWorker を開始したいからです。
したがって、理想的なパイプラインは次のとおりです。parentWorker > X # of otherWorkers > everyone done? > nextWorker
どうすればこれを実現できますか?
ポーリングベースのソリューションで回答しないでください。私はそれを探していません。
私はキャッシュを使用することを考えました:
- ここで、parentWorker は、次のように、作成される otherWorker の合計数を設定します。
cachekey_<parertTaskId>_workersCreated: 10
- その場合、他のワーカーは終了後に # をアトミックに -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