1

我在 Play Framework 中使用 Akka 而不是 Job,来安排代码每 X 秒运行一次。我的代码在 Heroku 免费层上运行,我相信它有时会暂停一段时间,然后由 Heroku 系统恢复。

是否有可能当 Heroku dyno 醒来时,它注意到它有一些“它欠”的事件并同时运行它们?我的代码不是线程安全的,并且假定在任何给定时间只会运行一个事件。

这是在播放开始时运行的演员设置:

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    val monitorActor = Akka.system.actorOf(Props[MonitorLoadJob], name = "monitorLoad")
    Akka.system.scheduler.schedule(0 seconds, 10 seconds, monitorActor, Tick)
  }
}
4

1 回答 1

1

Actor 一次处理一条消息,因此如果您使用调度程序每 10 秒向 monitorActor 发送一条 Tick 消息,则在 monitorActor 中对该 Tick 消息的处理必须是顺序的——与消息是否在批次中迟到无关, 或不。

如果您观察到并发行为,那么就会出现其他问题。

于 2013-03-28T15:57:11.547 回答