Akka Typed: From Any => Unit To T => Behavior[T]

May 15, 2018

Akka Typed made a lot of progress over the last year and brings the great benefits of Scala’s type system to Akka.

Here is a simple example of an immutable Actor which changes behaviour based on the incoming message.

object Greeter {
  sealed trait Command
  case object Greet extends Command
  final case class WhoToGreet(who: String) extends Command

  val greeterBehavior: Behavior[Command] = greeterBehavior(currentGreeting = "There is nobody to greet")

  private def greeterBehavior(currentGreeting: String): Behavior[Command] =
    Actor.immutable[Command] { (ctx, msg) =>
      msg match {
        case WhoToGreet(who) =>
          greeterBehavior(s"Hello, $who")
        case Greet =>
          println(currentGreeting)
          Actor.same
      }
    }
}