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
-catch
、Try
等从错误中恢复,而Supervisor应该与SupervisionStrategies 提供容错 like in documentation.
有人可以解释一下 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
-catch
、Try
等从错误中恢复,而Supervisor应该与SupervisionStrategies 提供容错 like in documentation.