小智 64
在Akka 1.3.1中你真的不需要演员这样做你可以安排一个每5分钟调用一次的函数,如下所示:
Scheduler.schedule(() => println("Do something"), 0L, 5L, TimeUnit.MINUTES)
Run Code Online (Sandbox Code Playgroud)
但是,如果你因为其他原因确实希望它成为一名演员,你可以这样称呼它
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)
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Akka 2.0,那么就可以这样做
val system = ActorSystem("MySystem")
system.scheduler.schedule(0 seconds, 5 minutes)(println("do something"))
Run Code Online (Sandbox Code Playgroud)
或者像这样每隔5分钟向演员发送一条消息
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())
Run Code Online (Sandbox Code Playgroud)
mat*_*its 22
使用计划的方法是一种很好的方法,尽管如果按计划完成的工作如此之大以至于可能需要比计划的时间间隔更长的时间,则消息可能排队.如果希望在一次迭代结束和下一次迭代开始之间发生间隔,则使用scheduleOnce
以下模式:
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 = ???
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28636 次 |
最近记录: |