安排重复事件Akka

时间:2015-12-09 14:22:28

标签: scala akka scheduler

在Akka应用程序中,可以安排演员使用context.system.scheduler.schedule做一些重复的事情,然后传递initialDelay然后传递interval。我希望区间是随机的(即,在我希望模拟泊松过程的情况下,从指数分布中得出)。

如何使用Akka Scheduler安排事件在未来的随机点发生?

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望能够在调度程序中调整间隔,那是不可能的,因为当然这是不可变的,但您可以使用{{1}多次安排同一作业并在你去的时候调整延迟:

scheduleOnce

您可以安排一次该流程,它会触发case object DoSomething class MyActor() extends Actor { var delay = 10 context.system.scheduler.scheduleOnce(delay seconds, self, DoSomething) def receive: Receive = { case DoSomething => doSomething() } def doSomething(): Unit = { /** do something */ delay = delay * 2 context.system.scheduler.scheduleOnce(delay seconds, self, DoSomething) () } } 方法,该方法将以不同的延迟对另一个预定作业进行排队。

答案 1 :(得分:1)

这可以通过递归函数来完成:

def doSomething : Unit = ???

def randomIntervalGenerator : FiniteDuration = ???

@scala.annotation.tailrec
def randomSchedule(count : Int) : Unit = 
  if(count > 0) {
    Thread sleep randomIntervalGenerator.toMillis
    doSomething
    randomSchedule(count -1)
  }