En Akka, ¿hay alguna manera de restringir los mensajes a los actores para que sean de un tipo estático específico que no sea el uso de las API "Typed Actor" que utilizan un modelo de programación de estilo RPC?¿Cómo restringir los mensajes del actor a tipos específicos?
¿Puedo utilizar el estilo de pase de mensajes con Akka sin descartar la seguridad del tipo estático en los límites del actor?
Por ejemplo, me gustaría utilizar código como este:
sealed abstract class FooMessage
case object Foo extends FooMessage
case object Bar extends FooMessage
class FooActor extends Actor[FooMessage] {
def receive = {
case Foo =>() // OK
// Would raise a compiler error:
// case s: String => error("Can't happen, String is not a subtype of FooMessage")
}
}
val fooActor = actorOf[FooActor]
fooActor ! Foo // OK
// Won't compile:
fooActor ! "Hello"
Tal vez habría que extender algún rasgo base o tener una construcción como Either
para permitir mensajes de nivel de sistema (Exit
, etc.)
Gracias por la útil respuesta. ¿Alguna vez (el equipo Akkka) ha intentado agregar restricciones de tipo a los mensajes a los actores, o nunca se ha considerado una idea útil? – mkneissl
Se ha hablado de eso en la lista en el pasado, pero siempre terminamos en el mismo lugar, TypedActor es para ese uso, y Actor es para un comportamiento dinámico total. Puedes experimentar con tu propia abstracción encima de ActorRef si quieres sentirte más en control. ¿Eso ayuda? Cheers, √ –