in pekko-sample-distributed-workers-scala/src/main/scala/worker/FrontEnd.scala [56:82]
def busy(workCounter: Int, workInProgress: Work): Behavior[Command] = {
def sendWork(work: Work): Unit = {
implicit val timeout: Timeout = Timeout(5.seconds)
ctx.ask[SubmitWork, WorkManager.Ack](workManager, replyTo => SubmitWork(work, replyTo)) {
case Success(_) => WorkAccepted
case Failure(_) => Failed
}
}
sendWork(workInProgress)
Behaviors.receiveMessage {
case Failed =>
ctx.log.info("Work {} not accepted, retry after a while", workInProgress.workId)
timers.startSingleTimer("retry", Retry, 3.seconds)
Behaviors.same
case WorkAccepted =>
ctx.log.info("Got ack for workId {}", workInProgress.workId)
idle(workCounter)
case Retry =>
ctx.log.info("Retrying work {}", workInProgress.workId)
sendWork(workInProgress)
Behaviors.same
case Tick =>
Behaviors.unhandled
}
}