Planification d'une tâche à une heure fixe de la journée avec Akka
Je suis un débutant avec Akka. J'ai besoin de planifier une tâche chaque jour à heure fixe de la journée, disons 8H. Ce que je sais faire est de planifier une tâche périodique, par exemple
import akka.util.duration._
scheduler.schedule(0 seconds, 10 minutes) {
doSomething()
}
Quelle est la façon la plus simple de planifier des tâches à heures fixes de la journée, dans Akka?
Une petite parenthèse
Il est facile de faire ce que je veux juste en utilisant cette fonctionnalité. Un jouet de la mise en œuvre pourrait ressembler
scheduler.schedule(0 seconds, 24 hours) {
val now = computeTimeOfDay()
val delay = desiredTime - now
scheduler.scheduleOnce(delay) {
doSomething()
}
}
Il n'est pas difficile, mais j'ai introduit un peu de condition de course. En fait, considérez ce qui se passe si je me lance ce juste avant 8H du matin. Externes fermeture va commencer, mais par moment je calcule delay
nous sommes peut-être après 8H. Cela signifie qu'à l'interne, fermeture - qui doit s'exécuter sur le champ, sera reportée à demain, en sautant ainsi l'exécution d'une journée.
Il y a des moyens de remédier à cette situation de concurrence: par exemple, j'ai pu effectuer la vérification toutes les 12 heures, et au lieu de la planification de la tâche tout de suite, l'envoyer à un acteur qui n'acceptera qu'une seule tâche à la fois.
Mais probablement, cela existe déjà dans d'Akka, ou une extension.
source d'informationauteur Andrea
Vous devez vous connecter pour publier un commentaire.
Écrire une fois, exécuter tous les jours
Je crois que Akka planificateur de poignées redémarre en interne, d'une façon ou d'une autre. J'ai utilisé non persistants moyen de l'envoi d'un message à l'auto - en fait non stricte de la garantie de livraison. Aussi, les tiques peuvent varier, donc GatherStatisticsPeriod pourrait être une fonction.
À l'utilisation de ce type de planification à Akka, vous devrez faire vos propres ou peut-être l'utilisation de Quartz, soit par le biais de Akka Chameau ou ce prototype de quartz pour akka.
Si vous n'avez pas besoin de quelque chose de compliqué et extrêmement précis, alors je voudrais simplement calculer le délai de la première fois et l'utiliser comme le délai de démarrage de l'horaire d'appel, et la confiance de l'intervalle.
Disons que vous voulez exécuter vos tâches chaque jour à 13 heures.
Rappelez-vous aussi que le serveur de fuseau horaire peut être différente de la vôtre.
Juste pour ajouter une autre manière de la réaliser, ce qui peut être fait à l'aide de Akka Flux par coutil un message et de filtrage dans les temps.