2013-03-28 124 views
1

我在Play Framework中使用Akka而不是Job,計劃每X秒運行一次代碼。我的代碼在Heroku免費套餐上運行,我相信它有時暫停一段時間,然後由Heroku系統恢復。Akka是否同時運行同一事件的多個實例?

當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) 
    } 
} 

回答

1

演員一次處理一個消息,因此,如果您使用調度到每10秒發出滴答消息monitorActor時,在monitorActor中處理該Tick消息必須是順序的 - 而不管消息是否在批處理後期進入。

如果您觀察到併發行爲,那麼其他事情就會出錯。

相關問題