我是Akka的新手。对于我正在使用Play框架2的项目,我需要运行预定的作业。 为此,我正在使用
Akka.system().scheduler().schedule(Duration.create(5, TimeUnit.MINUTES),
Duration.create(3, TimeUnit.HOURS),
dailyImportActor,
"import",
Akka.system().dispatcher(),
null);
演员正在做的工作是一项长期工作,可能需要1-4个小时。我的问题是。如果演员还在忙着做下一次的工作和时间会怎么样?演员是否被重建?它会阻塞并排队到某个地方然后运行吗? 谢谢!
答案 0 :(得分:3)
您只需每隔3小时向演员发送一条消息。如果演员“忙”,则消息将在其收件箱中排队。为避免排队消息,您应使用描述为here的其他方法或变体:
class ScheduleInReceive extends Actor {
import context._
override def preStart() =
system.scheduler.scheduleOnce(500 millis, self, "tick")
// override postRestart so we don't call preStart and schedule a new message
override def postRestart(reason: Throwable) = {}
def receive = {
case "tick" =>
// send another periodic tick after the specified delay
system.scheduler.scheduleOnce(1000 millis, self, "tick")
// do something useful here
}
}
答案 1 :(得分:0)
如果演员仍然忙,则消息将排队。如果你想开始并行工作,那么你可以添加另一个actor来创建实际的工作。