是否有人知道如何创建一个在延迟后执行Actor重启的SupervisorStrategy?为了提供一些上下文,我有一个在启动时查询数据库的actor。如果数据库连接关闭,则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实现本身?这似乎与“让它崩溃”的想法背道而驰。
答案 0 :(得分:2)
尚未实施重启延迟。 Thread.sleep在性能方面是不可能的。
我看到两个选择: