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 相比,专门为此编写)
我有以下 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 相比,专门为此编写)