2016-09-20 32 views
2

我想用阿卡系統的調度做一些事情間隔通話阿卡scheduler.scheduleOnce在演員沒有工作

system.scheduler.scheduleOnce(interval.milliseconds, dayActor, DaySwitch) 

我工作得很好,dayActor將收到DaySwitch消息。

在dayActor

def receive = { 
    case DaySwitch => 
    log.info("begin day switch") 
    context.system.scheduler.scheduleOnce(1.day, self, DaySwitch) 

後一天

,該dayActor沒有收到DaySwitch消息。

如何解決它。謝謝!

+0

你需要提供更多關於失敗的信息 – Jatin

回答

0

我想你在啓動調度程序或者與receive事件(請提供整個代碼)進行交互的地方有麻煩。

case object PullCounter 
case class PullResult(counter: Int) 
case object PullFailed 

class PullActor extends Actor { 
    val period = 2.seconds 
    var timerCancellable: Option[Cancellable] = None 

    def scheduleTimer() = { 
    timerCancellable = Some(
     context.system.scheduler.scheduleOnce(
     period, context.self, PullCounter 
    ) 
    ) 
    } 

    override def preStart() = scheduleTimer() 

    // so we don't call preStart and schedule a new message 
    // see http://doc.akka.io/docs/akka/2.2.4/scala/howto.html 
    override def postRestart(reason: Throwable) = {} 

    def receive = LoggingReceive { 
    case PullCounter => 
     val fReq = Database.fakeRequest() 
     fReq.map(counter => PullResult(counter)) pipeTo self 
     fReq.onFailure{ case _ => self ! PullFailed } 

    case PullFailed => 
     scheduleTimer() 

    case r: PullResult => 
     if(r.counter >= 5) { 
     context.system.shutdown() 
     } else { 
     scheduleTimer() 
     } 
    } 
} 

我想,像上面這樣的例子可以幫助你(至少,它幫助了我類似的情況)。我把它從this

+0

當我設置分鐘的時間段,比如5.minutes,它對我來說工作得很好。但是如果我把它設置爲1.day,它就會失敗。 – mqshen

+0

@ mqshen像'val period = 24 hours'這樣的東西呢? – pacman

+0

讓我試試這個。謝謝 – mqshen