Akka - 如何告诉系统在达到策略的最大重试次数后要做什么?

问题描述 投票:0回答:2

假设主管参与者定义了某种策略:

    private static SupervisorStrategy strategy =
        new OneForOneStrategy(10, Duration.create("1 minute"), DeciderBuilder.
                match(Exception.class, e -> resume()).
                matchAny(o -> escalate()).build());

假设演员被指示恢复,但在当前持续时间内第 11 次失败。

现在发生了什么?

家长演员是否正在升级问题?

它现在可以以某种有序的方式停止参与者(例如告诉子参与者关闭与数据库的连接)吗?

在这种情况下是否有另一种覆盖方法可以调用?

java akka akka-supervision
2个回答
0
投票

当 Actor 的主管收到来自受监督 Actor 的escalation 消息时,可以向子级发送消息以停止 DB。


0
投票

在 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.