在actor中调用akka scheduler.scheduleOnce无效

在actor中调用akka scheduler.scheduleOnce无效,akka,Akka,我想用akka系统的调度器做一些事情 system.scheduler.scheduleOnce(interval.milliseconds, dayActor, DaySwitch) 我工作正常,dayActor将收到DaySwitch消息 在dayActor中 def receive = { case DaySwitch => log.info("begin day switch") context.system.scheduler.scheduleOnce(1.

我想用akka系统的调度器做一些事情

system.scheduler.scheduleOnce(interval.milliseconds, dayActor, DaySwitch)
我工作正常,dayActor将收到DaySwitch消息

在dayActor中

def receive = {
  case DaySwitch =>
    log.info("begin day switch")
    context.system.scheduler.scheduleOnce(1.day, self, DaySwitch)
一天后,dayActor没有收到DaySwitch消息


如何修复它。谢谢

我想您在启动调度程序或与
receive
事件(请提供全部代码)交互的就地服务时遇到问题


我想,像上面这样的例子可以帮助你(至少,它在类似的情况下帮助了我)。我从

中获取了它。您需要提供更多关于失败的信息。当我以分钟为单位设置周期时,例如5.5分钟,对我来说效果很好。但是如果我将其设置为1.1天,它就失败了。@mqshen像这样的
val period=24小时
怎么样?
case object PullCounter
case class PullResult(counter: Int)
case object PullFailed

class PullActor extends Actor {
  val period = 2.seconds
  var timerCancellable: Option[Cancellable] = None

  def scheduleTimer() = {
    timerCancellable = Some(
      context.system.scheduler.scheduleOnce(
        period, context.self, PullCounter
      )
    )
  }

  override def preStart() = scheduleTimer()

  // so we don't call preStart and schedule a new message
  // see http://doc.akka.io/docs/akka/2.2.4/scala/howto.html
  override def postRestart(reason: Throwable) = {}

  def receive = LoggingReceive {
    case PullCounter =>
      val fReq = Database.fakeRequest()
      fReq.map(counter => PullResult(counter)) pipeTo self
      fReq.onFailure{ case _ => self ! PullFailed }

    case PullFailed =>
      scheduleTimer()

    case r: PullResult =>
      if(r.counter >= 5) {
        context.system.shutdown()
      } else {
        scheduleTimer()
      }
  }
}