【发布时间】:2015-12-10 20:06:17
【问题描述】:
我有一个服务,有一个主管负责构建子演员并处理他们的异常。
ServiceMain -> Supervisor -> DiscoveryActor
要构建DiscoveryActor,我调用以下代码
Await.result(supervisor ? (Props[Discovery], "Discovery"), Duration.create(60, SECONDS)) match {
case actor: ActorRef =>
discoveryActor = actor
case ex: Exception =>
logger.error("Failed to initialize discovery actor", ex)
sys.exit(1)
}
Supervisor 中的这段代码会处理它
def receive = {
case p: Props => sender() ! context.actorOf(p)
case (p: Props, s: String) => sender() ! context.actorOf(p, s)
}
如果DiscoveryActor 无法按照配置研究主机,则它应该在preStart() 中引发异常。异常ApiConnectionException是actor抛出的,被akka捕获,变成了ActorInitializationException。
我已经厌倦了在 Await 和 superviseStrategy 中捕捉到这个异常
override val supervisorStrategy =
AllForOneStrategy() {
case _: Exception => Escalate
}
但是这些都没有设法捕获它,我正在尝试做的是捕获此类异常并退出应用程序。
如果有人能指出我哪里出错或我错过了什么,我将非常感激!
【问题讨论】: