我刚遇到一个与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)
//...
}
答案 0 :(得分:0)
PreRestart
不是异常处理程序,而是进行清理的机会。为了强调这一点,在Akka Typed中将信号保留得尽可能简单。
您可以说,这也是“让崩溃”范式产生的结果:如果期望发生异常,那么您可以在发生异常的地方进行处理。但是,如果异常是意外的,那么演员监督和自动重启应该处理的情况恰恰是这样:除了空白之外,别无其他假设。
类型化的监管策略(tutorial post)可以按异常类型选择。甚至由于类似原因也无法查看细节。