ドキュメントから、アクターにメッセージを送信するとアクターが再起動されることがわかりKill
ましたが、実際には停止するだけです。
(ドキュメントが古くなっていますか?)
preStart
新しいトップレベル アクターを作成し、そのメソッドで古いトップレベル アクターを作成します。これがスーパーバイザーになり、このコードを新しいトップレベル アクターに配置することで、スーパーバイザー戦略を設定できます。
override val supervisorStrategy = OneForOneStrategy() {
case _: Exception => Restart
case _: Throwable => Escalate
}
メッセージはKill
、古いトップレベル アクターに送信する必要があります。
Kill は、「すべてのアクタが理解できるメッセージであり、処理されると、アクタは ActorKilledException をスローし、監視がトリガーされます。」. そのため、殺されたアクターの親アクターのスーパーバイザー ストラテジーが Stop の場合、再起動されません。akka 2.1.0 では、最上位のユーザー作成アクターを監視するガーディアン (例: "/user/") のスーパーバイザー戦略を構成できます。