Me gustaría saber si hay algún mecanismo en Akka que pueda tener un actor ejecutado periódicamente?¿Cómo puedo hacer que un actor Akka se ejecute cada 5 minutos?
Respuesta
Usted realmente no necesita un actor para hacer esto en Akka 1.3.1 puede programar una función a ser llamada cada 5 minutos como esto:
Scheduler.schedule(() => println("Do something"), 0L, 5L, TimeUnit.MINUTES)
Sin embargo, si usted quiere que sea un actor por otras razones que lo llamaría como esto
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 está utilizando Akka 2.0 a continuación, que sería hecho como éste
val system = ActorSystem("MySystem")
system.scheduler.schedule(0 seconds, 5 minutes)(println("do something"))
o enviar un mensaje a un actor cada 5 minutos como este
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())
El método que utiliza horario es una buena aproximación, aunque hay una posibilidad de que los mensajes que hacer cola si el trabajo realizado en la fecha prevista es tan grande que podría tomar más tiempo que el intervalo programado. Si desea que el intervalo de que se produzca entre el final de una iteración y la comenzando de la siguiente, a continuación, utilizar scheduleOnce
con el siguiente patrón:
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 = ???
}
Esta es la respuesta relevante a partir de 2016. Scheduler.schedule ya no es un método válido. – Zee
¿No podría simplemente usar 'context.system.scheduler.schedule (...)' para enviar mensajes a 'self' cada 5 minutos? Se vería mucho más limpio y eliminaría la necesidad de anular 'preStart'. –
@BranislavLazic No, el objetivo de no establecer un horario recurrente es evitar enviar otro mensaje al actor si alguna vez hay una situación en la que la lógica de procesamiento requiera tiempo más allá del intervalo entre cada mensaje programado. Con scheduleOnce(), el actor puede tomar todo el tiempo que necesite para completar cualquier trabajo que se necesite, y luego, cuando sea seguro, configure otro horario para enviarse un mensaje futuro. En algunas situaciones, esto puede evitar interbloqueos y otros problemas de concurrencia. – speby
Si alguien quiere el código de Java, entonces pueden hacer como esto
Cancellable cancellable = system.scheduler().schedule(Duration.Zero(), Duration.create(5, TimeUnit.MINUTES), cronActor, "tick", system.dispatcher(), null);
- 1. Crontab cada 5 minutos
- 2. ¿Cómo hacer que Ruby ejecute alguna tarea cada 10 minutos?
- 3. ¿Cómo puedo activar adecuadamente a un actor temporal en Akka?
- 4. ¿Cómo se espera que termine el sistema Akka actor?
- 5. Creando una vista materializada que se renueva cada 5 minutos
- 6. ¿Cómo obtendré un trabajo cron para que se ejecute cada 30 minutos?
- 7. Cómo hacer un trabajo cron cada 72 minutos
- 8. ¿Cómo puede un actor akka interactuar entre hilos?
- 9. Ejecutar prueba de selenio automáticamente Cada 5 minutos
- 10. Comprobando si Akka actor remoto está disponible
- 11. ¿Cómo programamos una clase para que se ejecute cada 15 minutos en Salesforce?
- 12. ¿Cómo hago que cron ejecute algo cada "N" en el minuto, donde n% 5 == 1?
- 13. Cómo puedo hacer que el instalador se ejecute como administrador
- 14. Descubrimiento de servidor de actor remoto Akka
- 15. Hacer que una instancia de Akka-2 se envíe un mensaje cada n unidades de tiempo sin desbordar el buzón
- 16. Akka - ¿Cuántas instancias de un actor debería crear?
- 17. Akka Actor "preguntar" y "aguardan" con TimeoutException
- 18. en OpenMP, ¿cómo puedo hacer que cada núcleo ejecute un único hilo?
- 19. ¿Cómo configuro la tolerancia a fallas del Akka Actor?
- 20. ¿Cómo puedo crear una UILocalNotification que notifique cada dos minutos?
- 21. Usar singletons en akka scala actor
- 22. ¿Cómo hacer que un bookmarklet se ejecute solo una vez?
- 23. mensaje de error con Scala AKKA Actor
- 24. ¿Puedo hacer que @OnApplicationStart no se ejecute en las pruebas?
- 25. HTML adjunto que contiene javascript no se ejecuta, ¿cómo puedo hacer que se ejecute?
- 26. ¿Cómo puedo hacer que un fragmento de código se ejecute en un hilo separado?
- 27. ¿Cómo puedo limitar que se ejecute un bucle foreach n?
- 28. Ejecutar un script PHP cada 5 minutos y evitar las condiciones de carrera
- 29. Manejar Akka buzón delimitado por el actor MessageQueueAppendFailedException
- 30. ¿Cómo puedo hacer que un programa concurrente ya escrito se ejecute en una matriz de GPU?
Aquí me acaba de encontrar una solución perfecta: http://doc.akka.io/docs/akka/2.0/scala/scheduler.html –