如何在Akka Typed中使用PreRestart?

时间:2019-05-19 11:47:12

标签: scala akka akka-typed

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

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

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

在我的Behaviors.receive内重新启动(类似于未键入的actor)以处理具体消息的异常?

所以目前我只看到收到PreRestart

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

1 个答案:

答案 0 :(得分:0)

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

您可以说,这也是“让崩溃”范式产生的结果:如果期望发生异常,那么您可以在发生异常的地方进行处理。但是,如果异常是意外的,那么演员监督和自动重启应该处理的情况恰恰是这样:除了空白之外,别无其他假设。

类型化的监管策略(tutorial post)可以按异常类型选择。甚至由于类似原因也无法查看细节。