scala akka在使用ask模式时如何捕获ActorInitializationException

时间:2018-05-16 08:09:20

标签: scala akka actor

我正在做这样的事情:

...lots of surrounding context...
val actor = context.actorOf(Props(new Actor(...))
(actor ? message) onComplete {
  case Done => {
   println("done")
   Do stuff with the surrounding context of this actor 
  }
  case _ => {
   println("got wildcard") // try to handle error message here
  }
}

Actor在使用

进行初始化时失败

akka.actor.ActorInitializationException(在演员的背景下)

在父母演员中我得到**dead letters encountered.** 由于actor从未正确创建,"message"无法投放。

在这种情况下,"ask?"模式永远不会正常返回。

我可以在父级全局级别创建SupervisorStrategy,但我需要了解生成异常的actor的上下文,并且不可能(或方便)在全局级别处理它

有没有办法在"ask"上下文actor ? message中“捕获”初始化异常?

1 个答案:

答案 0 :(得分:0)

根据akka哲学ask只有在你从演员系统外部与演员互动时才应该使用。 由于你有context的引用似乎你在演员代码中。所以你应该试着摆脱ask

如果我错了并且您从非akka代码中调用ask,那么您不应该尝试依赖于actor系统内发生的任何事情。你所拥有的只是一个ActorRef而没有保证,这个参考的另一面是什么。