2016-09-20 2 views
2

ich Akka System Scheduler zu tun, etwas, was IntervallAnruf akka scheduler.scheduleOnce in Schauspieler hat nicht funktioniert

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

I funktioniert gut verwenden möchten, wird dayActor DaySwitch Meldung.

in dayActor

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

nach einem Tag hat der dayActor nicht DaySwitch Meldung.

Wie Sie es beheben. Vielen Dank!

+0

Sie müssen mehr Informationen über Fehler – Jatin

Antwort

0

Ich nehme an, dass Sie Probleme mit dem Starten von Scheduler oder an Ort und Stelle haben, die Interaktion mit receive Ereignis dienen (bitte geben Sie den gesamten Code).

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

Ich nehme an, dass das obige Beispiel Ihnen helfen kann (zumindest hat es mir bei der ähnlichen Situation geholfen). Ich nahm es von this

+0

, wenn ich den Zeitraum in Minuten einstellen, wie 5. Minuten, funktioniert es gut für mich.Aber wenn ich es auf 1. Tag, schlug es fehl. – mqshen

+0

@ mqshen was ist mit so etwas wie "val period = 24 hours"? – pacman

+0

lass mich das versuchen. Danke – mqshen

Verwandte Themen