有没有人知道创建一个在延迟后执行 Actor 重启的 SupervisorStrategy 的方法?为了提供一些上下文,我有一个在启动时查询数据库的演员。如果 DB 连接断开,Actor 将旋转直到达到最大重试次数。延迟重启会很好。
蛮力但不可接受的解决方案是执行以下操作:
override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute)
{
case initEx: ActorInitializationException => {
Thread.sleep(1000)
Restart
}
case t =>
super.supervisorStrategy.decider.applyOrElse(t, (_: Any) => Escalate)
}
但是,这对我来说似乎站不住脚,因为我想避免任何阻塞代码。
这难道不是一个应该得到演员支持的概念吗?是否应该将延迟或重试移至 Actor 实现本身?这似乎与“让它崩溃”的想法背道而驰。