【问题标题】:Akka Actor Restart After a Time lapseAkka Actor 延时后重启
【发布时间】:2016-05-02 12:26:11
【问题描述】:

我有一个主管 Actor,它创建了几个子 Actor。我还定义了一个进行 OneToOne 处理的监督策略:

  override val supervisorStrategy =
    OneForOneStrategy() {
      case _ =>
        logger.info("doing restart")
        Restart
    }

我想知道如何在此重新启动中引入超时,以便在重新启动孩子之前假设 5 秒?我没有看到任何 Akka 文档指向我任何可配置的超时。有什么线索吗?我不想拥有 Thread.sleep(...)。这绝对是不合时宜的。还有其他建议吗?

【问题讨论】:

    标签: scala akka akka-supervision


    【解决方案1】:

    使用以下参数覆盖 OneForOneStrategy 怎么样:

    OneForOneStrategy(maxNrOfRetries = 6, withinTimeRange = 1.minute) {
      ...
      ...
    }
    

    这将确保子演员在 1 分钟内仅重新启动 6 次!

    【讨论】:

    • 这会在时间间隔内尝试重启子N次。没有定义进行这些尝试的时间间隔,也没有定义第一次尝试之前经过的时间间隔。
    【解决方案2】:

    您可以使用backoff supervisor,它的最小和最大回退配置为彼此相等。

    请注意,有两种不同类型的退避实例。一种用于onStop,另一种用于onFailure。在您的情况下,我会使用 onFailure,因为这是配置为处理异常情况的主管。

    【讨论】:

    • BackoffSupervisor 以越来越大的延迟重新启动子进程。我可能不需要那个!将 maxNrOfRetries 和 withinTimeRange 参数覆盖到 OneForOneStrategy 怎么样?这正是我想要的!
    • 一切以配置为准。如果您配置的最小退避和最大退避都相同,那么它将在尝试重新启动子进程之前等待该时间。
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2018-01-14
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多