Top-level 作为演员挂钩升级和关闭

Top-level Akka actor escalation and shutdown hooking

在我的 Akka 系统中有一个 top-level ("root") actor,Initializer,所有其他 actor 都来自它。还有一个 actor,Destroyer,负责在收到 Destroy 消息时优雅地关闭系统。有几种情况下演员会向 Destroyer 发送 Destroy,但这些在这里并不重要。

我现在想在 InitializerSupervisorStrategy 中实现功能,如果它不能处理它的一个孩子抛出的 failure/exception,它将解释作为 "stop the world" 类型的事件,并优雅地关闭系统。

我的下意识反应是让 Initializer 升级失败,但我不确定 top-most 演员升级时会发生什么。如果有一种方法可以让升级以某种方式调用 Desroyer,但不确定如何将其连接起来,那就太好了。有什么想法吗?

我在这里回答了一个类似的问题:

基本上,在您的配置集中:

akka.actor.guardian-supervisor-strategy = "akka.actor.StoppingSupervisorStrategy"

然后在您的 Initializer 中,您应该升级任何您希望对系统致命的异常。然后将停止 Initializer。您可以观看 Destroyer 中的 Initializer 并对 Terminated 事件做出反应,或者如果您想坚持自定义 Destroy 消息,请将 Destroy 发送至来自 postStop()DestroyerInitializer.