在开路断路器上选择合适的 actor supervisor 策略

Choosing a proper actor supervisor strategy on open circuit breaker

Akka 监督策略允许根据抛出的异常类型自定义行为,因此监督者可以选择是停止、重新启动、恢复失败的参与者,还是将错误升级到其父级。当参与者因 CircuitBreakerOpenException 而失败并且需要重新启动参与者时,我正在尝试构建自定义主管策略。如果我只选择重启策略,actor 将立即重启,这没有意义,因为它会在 resetTimeout 间隔内立即再次失败。所以正确的行为是等待 XXX 秒,然后使用 Restart 指令。但这种行为不能用演员监督策略来表达。

实现这种行为的正确方法是什么?我当然可以在子 actor 实现中添加一个 try/catch 句柄,但这违背了 actor 监督概念。

有一个 back-off supervision strategy 可以做你想做的,甚至更多。您可以使用 minBackoff 参数来指定您的初始等待时间。我还应该说,这是一种指数退避策略,因此它将继续重启受监督的 actor,但如果子 actor 继续抛出异常,则会增加退避时间。