【问题标题】:Scala - Difference between Supervisor and Try-catch error handling strategiesScala - Supervisor 和 Try-catch 错误处理策略之间的区别
【发布时间】:2020-01-14 13:29:11
【问题描述】:

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

【问题讨论】:

    标签: scala actorsystem


    【解决方案1】:

    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-catchTry 等从错误中恢复,而 Supervisor 应该与 SupervisionStrategies 一起使用以提供容错@987654322 @。

    【讨论】:

    • 非常感谢 Mateusz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多