【发布时间】:2020-01-14 13:29:11
【问题描述】:
有人能解释一下 Scala 中 ActorSystem 中“主管”和“try-catch”错误处理策略之间的区别吗?
【问题讨论】:
标签: scala actorsystem
有人能解释一下 Scala 中 ActorSystem 中“主管”和“try-catch”错误处理策略之间的区别吗?
【问题讨论】:
标签: scala actorsystem
Try-catch 可以从try 块内抛出的Exception 中恢复(前提是通过抛出Exception 报告错误)。它与演员无关,但它是处理 Scala 中错误的可用方法(继承自 Java):
def method(arg: String): Int = try {
arg.toInt
} catch {
case _: Throwable => 0
}
Supervisor 用于决定如果我们的代码中的Exception 没有被捕获或发生其他错误时该怎么做 - 这通常意味着其他一些Exception 但我们的代码没有抛出或处理 - 从一个传输消息集群到另一个无效的内部状态等。
Try-catch 是您可以在自己的代码中使用的东西,以确保方法能够成功。它的范围非常本地化。如果您无法做出这样的保证并想告诉 ActorSystem 如何处理无法自行处理错误的Actor(或者甚至可能与整组Actors),那么您可以使用Supervisor - Supervisor 但不能只需抓住Exception 并确保该函数将返回正常值。它将命令 Actor 重新启动(清除其状态或保持当前状态)、永久终止 Actor 或升级到 Actor 的父级。
当需要监督时相当well explained in the documentation。
简化,处理错误的处理应该留给 Actor,它在内部使用try-catch、Try 等从错误中恢复,而 Supervisor 应该与 SupervisionStrategies 一起使用以提供容错@987654322 @。
【讨论】: