各ジョブには、完了するために異なる戦略を必要とする数千の個別のタスクが含まれるジョブ処理システムがあります。個々のタスクがジョブ全体を構成します。すべてのタスクが完了した場合、ジョブは正常に完了したとマークされ、他の手順が実行されます。いずれかのタスクが失敗した場合、ジョブは失敗とマークされ、他の手順が実行されます。ジョブがタイムアウトした場合、ジョブはマークされる必要があります失敗したため、他の手順が実行されます。
ジョブの結果をすべて受信したら、次のジョブを取得できます。ジョブが現在処理されている間は、次のジョブを取得しないでください。
フローは次のようになります。
Job Polling Verticle はジョブをイベント バスに発行し、Job Processing Verticle は各タスクをイベント バスに発行します。ジョブ戦略が完了すると、タスクの結果がイベント バスに発行されます。
問題は、このモデルですべてのタスクがいつ完了したかを判断する正しい方法がわからないことです。すべてのバーティクルはステートレスであり、Job Processing Verticle はフューチャーを待機しません。また、Job Results Verticle がステートフルであったとしても、予想される結果の数はわかりません。
これを行うために私が考えることができる唯一の方法は、グローバルなステートフル オブジェクトを持つことです。しかし、これは良いデザインではないと思います。
さらに、いつ Job がタイムアウトしたかを知る必要があります。つまり、必要以上に長く実行されているため、失敗したと見なしてログに記録し、先に進む必要があります。
グローバル状態でこれを行うことができましたが、これも正しい解決策ではないと思います。
この垂直パターンは、私がやろうとしていることに対して意味がありますか?