actors scala asynchronous akka actor future

scala - actors - Akka Actor pregunta y escribe Safety



akka actor watch (2)

Prueba actores tipeados . Básicamente, le permiten interactuar con un actor utilizando rasgos / interfaces fuertemente tipados en lugar de intercambiar mensajes. Detrás de escena, Akka implementa estas interfaces con un proxy dinámico y realiza la magia asincrónica.

El actor mecanografiado puede volver a tener métodos con valores de devolución diferentes, fuertemente tipados (a partir de la documentación mencionada anteriormente):

def squareDontCare(i: Int): Unit //fire-forget def square(i: Int): Future[Int] //non-blocking send-request-reply def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply def squareNow(i: Int): Int //blocking send-request-reply

Este método representa tell mientras que los restantes son diferentes sabores de ask .

¿Cómo puedo usar Akka Actor para preguntar y mantener el tipo de seguridad? o evite usar ask a favor de tells?

¿Cuándo llama ? o ask sobre un Actor de Akka, se devuelve un Future[Any] y tengo que hacer un lanzamiento explícito a través de future.mapTo[MyType] .

No me gusta perder este tipo de seguridad. Si uso futuros directamente (sin actores) puedo devolver explícitamente Future[MyType] y mantener la seguridad del tipo.

Mi caso de uso específico involucra a un actor delegando su mensaje a dos actores secundarios y luego agregando los resultados de esos actores y devolviéndolo al remitente del padre. El método de recepción de mis padres es similar a este enfoque en los documentos de Akka:

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

¿Hay una mejor manera de lograr mi caso de uso?