J'aimerais savoir s'il existe un mécanisme dans Akka qui permet à un acteur d'être exécuté périodiquement?Comment puis-je faire exécuter un acteur Akka toutes les 5 minutes?
Répondre
Vous avez vraiment pas besoin d'un acteur à faire dans Akka vous 1.3.1 pouvez programmer une fonction à appeler toutes les 5 minutes comme ceci:
Scheduler.schedule(() => println("Do something"), 0L, 5L, TimeUnit.MINUTES)
Cependant, si vous ne voulez qu'il soit un acteur pour d'autres raisons que vous appelleriez comme ça
case class Message()
val actor = actorOf(new Actor {
def receive = {
case Message() => println("Do something in actor")
}
}).start()
Scheduler.schedule(actor, Message(), 0L, 5L, TimeUnit.MINUTES)
Si vous utilisez 2.0, il serait Akka alors fait comme ce
val system = ActorSystem("MySystem")
system.scheduler.schedule(0 seconds, 5 minutes)(println("do something"))
ou envoyer un message à un acteur toutes les 5 minutes comme celui-ci
case class Message()
class MyActor extends Actor {
def receive = { case Message() => println("Do something in actor") }
}
val system = ActorSystem("MySystem")
val actor = system.actorOf(Props(new MyActor), name = "actor")
system.scheduler.schedule(0 seconds, 5 minutes, actor, Message())
Scheduler.schedule ne semble pas exister plus – Phil
garder à l'esprit que vous voudrez peut-être savoir que l'invocation précédente fini son cours avant que le nouveau ne se déclenche après 5 minutes, dans certains cas au moins. Vous pouvez utiliser 'scheduleOnce' avec une logique supplémentaire, pour cela. – matanster
L'approche par le calendrier est une bonne approche, bien qu'il y ait un potentiel pour les messages à faire la queue si le travail effectué dans les délais prévus est si grand cela pourrait prendre plus de temps que l'intervalle prévu. Si vous voulez que l'intervalle de se produire entre la fin d'une itération et commençant de la suivante, utilisez scheduleOnce
avec le motif suivant:
import akka.actor.Actor
import scala.concurrent.duration._
class SchedulingActor extends Actor {
override def preStart(): Unit = {
self ! "Do Some Work"
}
def receive = {
case "Do Some Work" =>
doWork
context.system.scheduler.scheduleOnce(5 minutes, self, "Do Some Work")
}
def doWork = ???
}
Ceci est la réponse pertinente à partir de 2016. Scheduler.schedule n'est plus une méthode valide. – Zee
Ne pourriez-vous pas utiliser 'context.system.scheduler.schedule (...)' pour envoyer des messages à 'self' toutes les 5 minutes? Cela semblerait beaucoup plus propre et éliminerait le besoin de surcharger 'preStart'. –
@BranislavLazic Non, le fait de ne pas définir un programme récurrent consiste à éviter d'envoyer un autre message à l'acteur s'il y a une situation où la logique de traitement nécessite un temps au-delà de l'intervalle entre chaque message planifié. Avec scheduleOnce(), l'acteur peut prendre autant de temps qu'il le faut pour effectuer tout le travail nécessaire, puis, lorsqu'il est en sécurité, configurer un autre programme pour lui envoyer un message futur. Dans certaines situations, cela peut éviter les interblocages et autres problèmes de concurrence. – speby
Si quelqu'un veux code java alors ils peuvent faire comme ça
Cancellable cancellable = system.scheduler().schedule(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), cronActor, "tick", system.dispatcher(), null);
- 1. Crontab toutes les 5 minutes
- 2. Quand créer un acteur Akka
- 3. Comment faire pour exécuter un script PHP toutes les 5-10 minutes sans cron, perl etc?
- 4. Epingler/Exécuter Acteur Akka à fil principal
- 5. Comment exécuter une méthode toutes les minutes
- 6. Exécuter le script python toutes les 5 minutes sous Windows
- 7. Notification toutes les 5 minutes
- 8. Que faire lorsque mon AKKA Acteur meurt
- 9. Comment faire Ruby exécuter une tâche toutes les 10 minutes?
- 10. Akka acteur boucle infinie
- 11. Comment trouver un acteur spécifique dans Akka
- 12. Exécuter cron toutes les 245 minutes
- 13. Deserialize Acteur dans Akka
- 14. Exécuter une animation css toutes les minutes
- 15. messages acteur Akka agrègent
- 16. Obtenez un message d'un acteur Akka
- 17. Akka Acteur isTerminated dépréciée
- 18. Acteur Akka Sélection
- 19. Comment faire pour exécuter un script TCL pour dire exécuter toutes les 10 minutes?
- 20. Akka acteur transfert de travail avec Futures
- 21. Do périodicalTask toutes les 5 minutes
- 22. Comment faire un travail cron toutes les 72 minutes
- 23. exécuter le code toutes les 5 minutes et le terminer après 2 minutes. CountDownTimer ou Handler?
- 24. Akka HTTP Acteur Système
- 25. Vérification iOS toutes les 5 minutes
- 26. Actualiser l'écran toutes les 5 minutes
- 27. popup une fois toutes les 5 minutes
- 28. mysql Schedule Event toutes les 5 minutes
- 29. Acteur Akka retournant un avenir à l'expéditeur
- 30. Accès à Akka acteur extérieur
ici, je viens de trouver une solution parfaite: http://doc.akka.io/docs/akka/2.0/scala/scheduler.html –