В Akka существует ли способ ограничить сообщения субъектами конкретным статическим типом, отличным от использования API-интерфейсов "Типированный актер", которые используют Модель программирования стиля RPC?
Могу ли я использовать стиль передачи сообщений с Аккой, не отбрасывая безопасность статического типа на границах актера?
Например, я хотел бы использовать такой код:
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"
Возможно, нужно было бы расширить базовый признак или создать конструкцию типа Either
для сообщения системного уровня (Exit
и т.д.).