Scala Akka参与者的异常处理

Scala Akka参与者的异常处理,scala,exception-handling,akka,Scala,Exception Handling,Akka,子参与者中的函数生成的异常是否必须由子参与者显式捕获和抛出,或者主管策略指令(升级)是否会将生成的异常渗透到幕后的主管参与者 我的上司战略: override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 5, withinTimeRange = 5 minute) { case _: ArithmeticException ⇒ Resume case _: NullPointerException

子参与者中的函数生成的异常是否必须由子参与者显式捕获和抛出,或者主管策略指令(升级)是否会将生成的异常渗透到幕后的主管参与者

我的上司战略:

  override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = 5, withinTimeRange = 5 minute) {
  case _: ArithmeticException      ⇒ Resume
  case _: NullPointerException     ⇒ Restart
  case _: IllegalArgumentException ⇒ Stop
  case _: IOException              ⇒ Stop
  case _: Exception                ⇒ Restart
}   

子参与者中的某些操作可能会引发IOException。我是否应该在儿童演员身上放一个试抓块来抓它,然后扔掉它,这样主管就可以抓住它?或者akka会在幕后处理它吗?

如果你没有什么损失,就让它崩溃吧。这应该是默认行为。但不幸的是,有时你需要分配资源,或者你需要了解出问题时发生了什么


就我个人而言,在创建端点或web应用程序时,我通常会捕捉到我想要告知的所有异常情况。

大多数情况下,最好是“让它崩溃”,并根据您的情况选择正确的主管策略。如果您想保持内部状态,只需选择resume。可以使用preRestart方法在重新启动前清理资源


Akka拥有处理异常的复杂方法,为什么不使用它们呢?没有理由捕获异常,然后再次抛出它。

但如果不抛出它,异常是否会上升到主管级别,以便对其应用适当的主管策略?@PaulThomas是的,异常将被完全相同地抛出,因此将被完全相同地处理。