如何在 Akka Typed 中使用 PreRestart?

How to use PreRestart in Akka Typed?

我刚刚在工作中遇到了一个与 https://github.com/akka/akka/issues/26899 相对应的问题。

如何编写类型化的行为以获得

case (reason: Throwable, message: Option[Any]) =>

用于在我的内部重新启动(类似于无类型的 actor)Behaviors.receive用于处理具体消息的异常?

所以现在我只看到收到 PreRestart:

Behaviors.receiveMessage {
  msg =>
    //...
}.receiveSignal {
  case (actor, signal) =>
    println(signal)
    //...
}

PreRestart 不是异常处理程序,而是进行清理的机会。为了强调这一点,信号在 Akka Typed 中尽可能简单。

你可以说,这也是 "Let It Crash" 范式的结果:如果预期会出现异常,那么你可以在它发生的地方处理它。然而,如果异常是意外的,那么这正是 actor 监督和自动重启应该处理的情况:不要假设任何事情,而是从一张白纸开始。

类型化监管策略(tutorial post)可以按异常类型选择。由于类似的原因,即使在那里也无法查看详细信息。