我有一个scala snipet:
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调用下运行的方法也非常简单,但它没有出现任何错误。
问题是,在2-3天后,滴答声停止。我已经多次重新运行应用程序,在这段时间之后它似乎停止而没有任何错误。无法在网上找到任何帮助,所以我希望你们中的一些人可能会遇到同样的问题并知道答案。
谢谢,
马丁
答案 0 :(得分:1)
我无法确切地告诉您有什么问题,但为了使调试更加透明,您可以使用其他方法。
使用代替使用scheduleOnce
的演员为自己安排留言,而不是使用普通schedule
:
def receive: Unit = {
case "tick" =>
Logger.debug("5m tick")
context.system.scheduler.scheduleOnce(5.minutes, self, "tick")
}
在这个actor的父级中你可以使用Restart
监督指令,所以如果演员停止,它就会重新启动。
另一个选择是查看Quartz-Scheduler,这对于长时间运行的任务来说更为广泛(并且特别为此而写,与Akka相比)