Поведение Akka Supervision по умолчанию - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь научиться нашей стратегии наблюдения за Аккой. Когда у меня есть код что-то вроде этого ниже, я получаю это

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()
}

Но когда у меня нет созданного Child 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()
  1. Почему я не вижу исключения, я что-то упускаю?
  2. В чем причина этого поведение?
  3. Что такое хороший способ обработки исключений, когда у нас есть только 1 актер без ребенка?

1 Ответ

0 голосов
/ 17 января 2019

Вы не получили исключение только потому, что до того, как возникло исключение, ваша система актера была прервана, затем приложение закрывается.

Попробуйте добавить Thread.sleep(1000) перед actorSystem.terminate(), вы увидите исключение.

Кстати: это поведение не связано с if you use only one actor or with a child. Вы получаете исключение, если используете ребенка только потому, что это случайное поведение, связанное с временной последовательностью.

...