Scala - Supervisor 和 Try-catch 错误处理策略的区别

Scala - Difference between Supervisor and Try-catch error handling strategies

有人可以解释一下 Scala 中 ActorSystem 中 "supervisor"- 和 "try-catch"- 错误处理策略之间的区别吗?

try-catch 可以从 try 块中抛出的 Exception 中恢复(前提是通过抛出 Exception 报错)。它与 actors 无关,但它是处理 Scala 错误的可用方法(继承自 Java):

def method(arg: String): Int = try {
  arg.toInt
} catch {
  case _: Throwable => 0
}

Supervisor 用于决定如果我们代码中的 Exception 未被捕获或发生其他错误时要做什么 - 这通常意味着其他 Exception 但我们没有抛出或处理代码 - 将消息从一个集群传输到另一个集群、无效的内部状态等。

Try-catch 是您可以在自己的代码中使用的东西,以确保方法成功。它的范围非常局限。如果您不能做出这样的保证,并且想告诉 ActorSystem 如何处理无法自行处理错误的 Actor(或者甚至可能是整组 Actor),那么您可以使用 Supervisor - 然而,Supervisor 不能只捕获 Exception 并确保函数将 return 改为正常值。它将命令 Actor 重新启动(清除其状态或保持当前状态),永久杀死 Actor 或升级到 Actor 的父级。

需要监督的时候相当well explained in the documentation

简化,处理过程中的错误应该留给Actor,它在内部使用try-catchTry等从错误中恢复,而Supervisor应该与SupervisionStrategies 提供容错 like in documentation.