有人可以解释 Scala 中 ActorSystem 中“主管”和“try-catch”错误处理策略之间的区别吗?
1 回答
Exception
Try-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
- catch
,Try
等从错误中恢复,而 Supervisor 应该与 SupervisionStrategies 一起使用,以提供容错,就像在文档中一样。