【发布时间】:2019-01-17 02:01:03
【问题描述】:
我正在尝试学习 Akka 监督策略。当我有下面这样的代码时,我确实得到了这个
java.lang.ArithmeticException: / 为零
case object CreateChildren
case class DivideNumbers(n: Int , d:Int)
object SuperVision extends App {
val actorSystem = ActorSystem("SupervisingActorSystem")
val actor = actorSystem.actorOf(Props[ParentActor], "ParentActor")
actor ! CreateChildren
val child1 = actorSystem.actorSelection("/user/ParentActor/childActor")
child1 ! DivideNumbers(4,0)
class ParentActor extends Actor{
override def receive: Receive = {
case CreateChildren =>
context.actorOf(Props[ChildActor], "childActor")
}
}
class ChildActor extends Actor{
override def receive: Receive = {
case DivideNumbers(n,d) => println(n/d)
}
}
actorSystem.terminate()
}
但是当我没有创建子 Actor 并且有类似的东西时,我看不到异常。
val actorSystem = ActorSystem("SupervisingActorSystem")
val actor = actorSystem.actorOf(Props[ParentActor], "ParentActor")
actor ! DivideNumbers(4, 2)
class ParentActor extends Actor {
override def receive: Receive = {
case DivideNumbers(n, d) => println(n / d)
//case DivideNumbers(n, d) => throw new Exception
//Even this doesn't throw an exception
}
}
actorSystem.terminate()
- 为什么我没有看到异常,是我遗漏了什么吗?
- 这背后的原因是什么 行为?
- 什么是处理异常的好方法? 只有一位演员没有孩子?
【问题讨论】: