在actor中调用akka scheduler.scheduleOnce无效
我想用akka系统的调度器做一些事情在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.
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()
}
}
}