如何优雅地重启整个演员系统?换句话说,使用gracefulStop
(或至少是重要的!)停止系统中的所有演员。
基本上我想在测试期间重新启动应用程序,而不会每次都启动新的单独JVM。
我正在使用Akka 2.0.5。
答案 0 :(得分:6)
每当你实现了一个actor系统并且缺少一个函数时,请不要犹豫再添加一个actor来处理它:在这种情况下创建一个actor,它的工作就是向你的重要部分发送优雅的停止请求演员等待他们的终止。那个演员可以关闭演员系统,而从外面你awaitTermination
。如果您使用system.actorOf(Props[Terminator], "terminator")
创建了该actor,则可以使用
system.actorFor("/user/terminator") ! MakeItStop // or whatever message you choose
try system.awaitTermination(1.minute) // or however long it may take
catch {
case _: TimeoutException => system.shutdown() // as a last resort
}
答案 1 :(得分:1)
如果是单元测试,你可以停止ActorSystem并开始一个新的。
val system1 = ActorSystem("system1")
system1.shutdown() // This is async and will return before the system actually stops.
val system2 = ActorSystem("system2")
我不确定如何重新启动系统(实际上,我不确定上述是否会起作用,但我认为没有理由不这样做。)