假设主管参与者定义了某种策略:
private static SupervisorStrategy strategy =
new OneForOneStrategy(10, Duration.create("1 minute"), DeciderBuilder.
match(Exception.class, e -> resume()).
matchAny(o -> escalate()).build());
假设演员被指示恢复,但在当前持续时间内第 11 次失败。
现在发生了什么?
家长演员是否正在升级问题?
它现在可以以某种有序的方式停止参与者(例如告诉子参与者关闭与数据库的连接)吗?
在这种情况下是否有另一种覆盖方法可以调用?
当 Actor 的主管收到来自受监督 Actor 的escalation 消息时,可以向子级发送消息以停止 DB。
在 Akka 中,您可以重写子 Actor 中的 preRestart 或 postStop 方法。当参与者停止时,这些方法可以执行清理(例如关闭连接)。例如:
@Override
public void preRestart(Throwable reason, Optional<Object> message) {
// Close DB connection or any other resource cleanup before restart
super.preRestart(reason, message);
}
@Override
public void postStop() {
// Final cleanup after the actor stops
super.postStop();
}