3 Reasons Why Akka Typed Helps You Write Better Code
A quick overview of how Akka bakes in good practices directly in the new typed API.
Join the DZone community and get the full member experience.
Join For FreeYou can also find this post over at the Rock the JVM blog and in video form on YouTube or attached below:
Typed Messages
xxxxxxxxxx
trait ShoppingCartMessage
case class AddItem(item: String) extends ShoppingCartMessage
case class RemoveItem(item: String) extends ShoppingCartMessage
case object ValidateCart extends ShoppingCartMessage
val shoppingActor = ActorSystem(
Behaviors.receiveMessage[ShoppingCartMessage] { message =>
message match {
case AddItem(item) =>
println(s"adding $item")
case RemoveItem(item) =>
println(s"removing $item")
case ValidateCart =>
println("checking cart")
}
Behaviors.same
},
"simpleShoppingActor"
)
Mutable State
xxxxxxxxxx
val shoppingActorMutable = ActorSystem(
Behaviors.setup { _ =>
var items: Set[String] = Set()
Behaviors.receiveMessage[ShoppingCartMessage] {
case AddItem(item) =>
println(s"adding $item")
items = items + item
Behaviors.same
case RemoveItem(item) =>
println(s"depositing $item")
items = items — item
Behaviors.same
case ValidateCart =>
println(s"checking cart: $items")
Behaviors.same
// can also try with pattern matching and returning Behavior.same once
}
},
"mutableShoppingActor"
)
xxxxxxxxxx
def shoppingBehavior(items: Set[String]): Behavior[ShoppingCartMessage] =
Behaviors.receiveMessage[ShoppingCartMessage] {
case AddItem(item) =>
println(s"adding $item")
shoppingBehavior(items + item)
case RemoveItem(item) =>
println(s"removing $item")
shoppingBehavior(items — item)
case ValidateCart =>
println(s"checking cart: $items")
Behaviors.same
}
Actor Hierarchy
xxxxxxxxxx
val rootActor = ActorSystem(
Behaviors.setup[ShoppingCartMessage] { ctx =>
// create children
ctx.spawn(shoppingBehavior(Set()), "danielsShoppingCart")
// no behavior in the root actor directly
Behaviors.empty
},
"onlineStore"
)
A Way Forward
Published at DZone with permission of Daniel Ciocirlan. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments