如何避免在Akka重新运行演员?

时间:2014-09-16 11:45:23

标签: java scala playframework-2.0 akka

我是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个小时。我的问题是。如果演员还在忙着做下一次的工作和时间会怎么样?演员是否被重建?它会阻塞并排队到某个地方然后运行吗? 谢谢!

2 个答案:

答案 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来创建实际的工作。