ActorSystem.scheduler 在事件数后停止工作

ActorSystem.scheduler stops working after number of events

我有以下 Scala 代码片段:

implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
implicit val wsClient = AhcWSClient()
import scala.concurrent.ExecutionContext.Implicits.global    

ActorSystem().scheduler.schedule(30.seconds, 5.minutes)(
{
  Logger.debug("5m tick")
  /* more code */
}

它是家庭自动化应用程序的一部分,需要 运行 长期 运行 重启之间的几个月。

现在,它每 5 分钟跳动一次,并向控制台和文件生成一条日志消息。在 Logger 调用下面还有一个非常简单的方法 运行ning,但它没有收到任何错误。

问题是,大约 2-3 天后,滴答停止了。我已经重新 运行 应用程序好几次了,在这段时间之后,它似乎没有任何错误地停止了。在网上找不到任何帮助,所以我希望你们中的一些人可能 运行 以前遇到过同样的问题并且知道答案。

谢谢,

马丁

我真的不能说出你的问题是什么,但为了使调试更透明,你可以使用另一种方法。

使用一个 actor,它使用 scheduleOnce 为自己安排一条消息,而不是使用正常的 schedule:

def receive: Unit = {
    case "tick" =>
        Logger.debug("5m tick")
        context.system.scheduler.scheduleOnce(5.minutes, self, "tick")
}

在该 actor 的父级中,您可以使用 Restart 监督指令,因此如果 actor 停止,它只会重新启动。

另一种选择是研究 Quartz-Scheduler,它对于长期 运行 任务来说更广泛(与 Akka 相比,专门为此编写)