Akka是否同时运行同一事件的多个实例?

时间:2013-03-28 15:12:35

标签: heroku playframework akka playframework-2.1

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

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

这是在Play start:

上运行的actor设置
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)
  }
}

1 个答案:

答案 0 :(得分:1)

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

如果你观察到并发行为,那么其他的东西就会出错。