在我的Akka系统中,有一个顶级(“根”)演员Initializer
,所有其他演员都来自该演员。还有一个actor Destroyer
,它负责在收到Destroy
消息时正常关闭系统。演员有几个条件会向Destroy
发送Destroyer
,但这些并不重要。
我现在想要在Initializer
的{{1}}中实现功能,如果它无法处理其中一个孩子抛出的失败/异常,它会将其解释为“停止”世界“ - 类型的事件,并优雅地关闭系统。
我的膝跳反应是让SupervisorStrategy
升级失败,但我不确定当最顶级的演员升级时会发生什么。如果有一种方法可以以某种方式调用Initializer
,但不确定如何将所有内容连接起来,那将会很好。有什么想法吗?
答案 0 :(得分:1)
我在这里回答了类似的问题:How to escalate top-most supervisors in Akka?
基本上,在您的配置集中:
akka.actor.guardian-supervisor-strategy = "akka.actor.StoppingSupervisorStrategy"
然后在您的Initializer
中,您应该升级您希望对系统致命的任何异常。然后将停止初始化程序。您可以观看Initializer
中的Destroyer
并对Terminated
事件作出反应,或者如果您想坚持自定义Destroy
消息,请发送Destroy
来自Destroyer
内的postStop()
的{{1}}。