Akka で見られる動作に混乱しています。簡単に言うと、科学計算 (星形成シミュレーション) を実行するアクターのセットがあります。彼らはいくつかの状態を持っています。1つ以上が無効な状態になるようなエラーが発生した場合、セット全体を再起動して最初からやり直したい。また、単一の計算 (セット全体にわたる) に時間がかかりすぎる場合にもこれを実行したいと考えています (実行にかかる時間を事前に予測する方法はありません)。
そのため、ツリーの最下部にシミュレーション アクターのセットがあり、その上にディレクターがあります (ルーターを介してそれらを作成し、そのルーターを介してメッセージを送信します)。異なるマシン上にディレクターを作成し、それらすべてから結果を収集するために、その上にもう 1 つのディレクター レベルがあります。
シミュレーションの開始時に Akka Scheduler を使用して、ローカル Director で 1 回限りのタイムアウト イベントを作成することで、タイムアウトのケースを処理します。Director がこのイベントを取得したときに、すべての Simulation アクターが終了していない場合、Director は次のことを行います。
children ! Broadcast(Kill)
ここで、children は、それらを所有/作成したルーターです。これにより、すべての子 (SimulActors) に Kill が送信されます。
私が考えたのは、すべての子アクターが再起動されるということです。ただし、それらの preRestart() フック メソッドは呼び出されません。Kill メッセージが受信されたことがわかりますが、それだけです。
ここで何か基本的なことが欠けているに違いありません。このトピックに関する Akka のドキュメントを読んだことがありますが、あまり明確ではないと言わざるを得ません (特に、スーパーバイザーに関するページ)。キル/再起動プロセスの完全な説明、またはその他の参考資料をいただければ幸いです (Google はあまり役に立ちませんでした)。