Planen einer Aufgabe auf eine Feste Zeit des Tages mit Akka
Ich bin ein Anfänger mit Akka. Ich brauche eine Aufgabe planen, jeden Tag zu einem festen Zeitpunkt des Tages, sagen wir 8 UHR. Was ich weiß, wie zu tun ist, planen einer Aufgabe periodisch, zum Beispiel
import akka.util.duration._
scheduler.schedule(0 seconds, 10 minutes) {
doSomething()
}
Was ist die einfachste Möglichkeit zum planen von Aufgaben zu festen Zeiten des Tages in Akka?
Eine kleine Klammer
Ist es einfach zu tun, was ich will nur mit dieser Funktion. Ein Spielzeug Umsetzung Aussehen würde wie
scheduler.schedule(0 seconds, 24 hours) {
val now = computeTimeOfDay()
val delay = desiredTime - now
scheduler.scheduleOnce(delay) {
doSomething()
}
}
Es ist nicht schwer, aber ich führte eine kleine race-Bedingung. In der Tat, betrachten Sie, was passiert, wenn ich starten kurz vor 8 UHR. Die externe Schließung wird gestartet, aber durch die Zeit, die ich berechnen delay
wir können nach 8 Uhr. Dies bedeutet, dass der interne Verschluss - execute-rechten Weg - verschoben auf morgen, und damit das überspringen der Ausführung für einen Tag.
Gibt es Möglichkeiten, dieses Problem zu beheben race-Bedingung: für das Beispiel, ich könnte führen Sie die Prüfung alle 12 Stunden, und statt der Terminierung die Aufgabe sofort, indem er Sie an einen Schauspieler, nicht annehmen mehr als eine Aufgabe zu einer Zeit.
Aber wahrscheinlich, diese bereits im Akka oder einige extension.
InformationsquelleAutor der Frage Andrea | 2012-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Write once, run everyday
Ich glaube, dass die Akka - scheduler verarbeitet neu gestartet wird intern die eine oder andere Weise. Ich verwendete nicht-persistente Weise senden einer Nachricht an sich selbst eigentlich keine Feste Garantie für die Lieferung. Auch Zecken können variieren, so GatherStatisticsPeriod könnte eine Funktion sein.
InformationsquelleAutor der Antwort idonnie
Diese Art von scheduling in Akka, müssten Sie Rollen Sie Ihre eigenen oder vielleicht mit Quarz, entweder durch Akka Camel oder diese Prototyp Quarz für akka.
Wenn Sie nicht brauchen etwas Phantasie und extrem genau, dann würde ich berechnen Sie die Verzögerung, um den gewünschten ersten Zeit und benutzen Sie es als start-Verzögerung für den Zeitplan nennen, und Vertrauen Sie dem Intervall.
InformationsquelleAutor der Antwort Björn Antonsson
Lassen Sie uns sagen, Sie wollen führen Sie Ihre Aufgabe jeden Tag um 13 Uhr.
Denken Sie auch daran, dass die server-Zeitzone kann sich von Ihnen unterscheiden.
InformationsquelleAutor der Antwort Pavel Khamutou
Nur ein weiterer Weg, um es zu erreichen, können Sie diese über das Akka Streams von tickt eine Nachricht und filtern auf Zeit.
InformationsquelleAutor der Antwort ticofab