0

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

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

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

4

1 回答 1

2

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

不。

文档的“消息发生了什么”部分描述了当参与者处理消息时抛出异常时的行为:

消息会发生什么

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

上述行为适用于任何监督策略:恢复、重启或停止。(“升级”是经典 Akka 中的第四种策略,但在 Akka Typed 中没有明确支持。但是,升级可以在 Akka Typed 中模拟。)

于 2020-07-14T18:12:17.260 回答