0

有人可以解释 Scala 中 ActorSystem 中“主管”和“try-catch”错误处理策略之间的区别吗?

4

1 回答 1

1

ExceptionTry-catch 可以从块内的throwing中恢复try(前提是 throwing 报告了错误Exception)。它与演员无关,但它是处理 Scala 中错误的可用方法(继承自 Java):

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

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

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

文档中很好地解释了何时需要监督。

简化,处理过程中的错误应该留给 Actor,它使用try- catchTry等从错误中恢复,而 Supervisor 应该与 SupervisionStrategies 一起使用,以提供容错,就像在文档中一样。

于 2020-01-15T02:01:09.273 回答