【问题标题】:Akka Actors Supervision - Does 'resume' keep current message?Akka Actors Supervision - “恢复”是否保留当前消息?
【发布时间】:2020-07-14 17:32:28
【问题描述】:

在 Akka Actors(使用 Scala)中,可以使用监督策略来处理异常。这个策略可以根据异常的类型决定如何处理actor。据我了解,有四种可能的结果:

  • 恢复- 让子 Actor 保持其当前状态并继续处理新消息,就像什么都没发生一样。
  • 重新启动 - 重新启动子actor,即杀死当前失败的子actor并创建一个新的子actor。
  • 停止 - 永久关闭子actor。
  • 升级 - 让主管的主管处理此错误。

The documentation 明确指出,在重新启动 Actor 时,当前消息将丢失,必须进行处理。但是,它没有明确提及是否同样适用于简历。它是继续处理该消息(假设某些外部因素导致该异常不再存在),还是继续处理邮箱中的下一条消息?

【问题讨论】:

    标签: scala akka actor akka-supervision


    【解决方案1】:

    “恢复”是否保留当前消息?

    没有。

    文档的"what happens to the message" 部分描述了在参与者处理消息时引发异常时的行为:

    消息会发生什么

    如果在处理消息时抛出异常(即从其邮箱中取出并移交给当前行为),则该消息将丢失。重要的是要了解它不会放回邮箱。因此,如果您想重试处理一条消息,您需要自己处理它,通过捕获异常并重试您的流程。确保限制重试次数,因为您不希望系统活锁(因此会消耗大量 CPU 周期而没有进展)。

    上述行为适用于任何监管策略:恢复、重启或停止。 (“升级”是经典 Akka 中的第四个策略,但 is not explicitly supported in Akka Typed。然而,escalation can be emulated in Akka Typed。)

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2015-05-09
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多