Dans Akka, existe-t-il un moyen de limiter les messages aux acteurs à un type statique spécifique autre que l'utilisation des API "Typed Actor" qui utilisent un modèle de programmation de type RPC? Est-ce que je peux utiliser le style de passage de message avec Akka sans rejeter la sécurité de type statique aux limites de l'acteur?Comment limiter les messages d'acteur à des types spécifiques?
Par exemple, je voudrais utiliser le code comme ceci:
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"
Peut-être faudrait étendre un trait de base ou une construction comme Either
pour permettre des messages au niveau du système (Exit
, etc.).
Merci pour la réponse utile. Avez-vous (l'équipe akka) essayé d'ajouter des contraintes de type aux messages aux acteurs, ou cela n'a jamais été considéré comme une idée utile? – mkneissl
On en a parlé dans la liste par le passé, mais on se retrouve toujours au même endroit, TypedActor est pour cette utilisation, et Actor est pour le comportement dynamique total. Vous pouvez expérimenter avec votre propre abstraction en plus d'ActorRef si vous voulez vous sentir plus en contrôle. Est ce que ça aide? Cheers, √ –