Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Akka Actor ask and Type Safety

How can I use Akka Actor ask and maintain type safety? or avoid using ask in favour of tells?

When calling ? or ask on an Akka Actor, a Future[Any] is returned and I have to do an explicit cast via future.mapTo[MyType].

I don't like losing this type safety. If I use Futures directly (with no actors) I can explicitly return Future[MyType] and maintain type safety.

My specific use case involves an actor delegating it's message to two child actors and then aggregating the results from those actors and returning that to the parent's sender. My parent's receive method looks similar to this approach in the Akka Docs:

http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions

val f1 = actor1 ? msg
val f2 = actor2 ? msg

val f3 = for {
  a ← f1.mapTo[Int]
  b ← f2.mapTo[Int]
  c ← ask(actor3, (a + b)).mapTo[Int]
} yield c

Is there a better way to achieve my use case?

like image 906
theon Avatar asked Nov 29 '12 16:11

theon


1 Answers

I wanted to post a new answer because @Roland Kuhn recently presented a new solution for this called Typed Channels:

val f: Future[MyType] = actor <-?- message
  • Roland's Presentation
  • In the Akka docs
like image 140
theon Avatar answered Oct 18 '22 18:10

theon