In Akka http://akka.io/,除了使用 RPC 风格编程模型的“Typed Actor”API 之外,是否有其他方法可以将发送给 Actor 的消息限制为特定的静态类型?
我可以在 Akka 中使用消息传递风格而不放弃 Actor 边界的静态类型安全吗?
例如,我想使用这样的代码:
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
, etc.).
然后,您必须将消息类型编码到 Actor 引用中,这将大大减少 ActorRegistry 等内容的值。
此外,使用“成为”(这是演员模型的基础)等强大的机制,输入消息的价值就降低了。
由于当消息与当前行为不匹配时,Akka 不会泄漏内存,因此不存在将“错误”消息发送给“错误”参与者的相同风险。
另外,Actor 本质上是动态的,所以如果你想让它们静态,请使用 TypedActor (这不是 RPC,它就像常规 Actor 一样的 RPC,void 方法是 ! 调用,Future 返回类型是 !!! 以及其他返回类型是基于!!)
常见的做法是在 Actor 的伴生对象中声明 Actor 可以接收哪些消息,这使得更容易知道它可以接收什么。
这有帮助吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)