在Akka应用程序中,可以安排演员使用context.system.scheduler.schedule
做一些重复的事情,然后传递initialDelay
然后传递interval
。我希望区间是随机的(即,在我希望模拟泊松过程的情况下,从指数分布中得出)。
如何使用Akka Scheduler安排事件在未来的随机点发生?
答案 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)
}