Actor-based concurrency system with Akka
import akka.actor.typed.{ActorRef, Behavior}
import akka.actor.typed.scaladsl.Behaviors
object Worker {
sealed trait Command
final case class ProcessJob(id: String, replyTo: ActorRef[Result]) extends Command
final case class Result(id: String, status: String)
def apply(): Behavior[Command] = Behaviors.receive { (context, message) =>
message match {
case ProcessJob(id, replyTo) =>
context.log.info(s"Processing job $id")
val result = process(id)
replyTo ! Result(id, "completed")
Behaviors.same
}
}
private def process(id: String): String = {
Thread.sleep(100)
s"Result for $id"
}
}