Akka 框架建议仅将类型化的 Actor 用于与外部代码交互。但是,来自 akka 的标准演员是无类型的。有没有更好的方法来创建类型安全的演员?是否有其他一些演员框架或围绕 akka 的类型安全包装器?
4 回答
如果您真的想要具有静态类型的演员,那么您不妨继续在整个代码中使用类型化的演员。出于几个原因,强烈建议不要这样做。
1.) 您冒着系统退化为一堆 RPC 的风险。演员的接收方法很明显,整个事情都是关于消息传递的,如果你只是在一个类型化的演员上调用方法,那就更不用说了。
2.) 演员真的没有类型。当它运行时,actor 能够处理的消息可能会根据所处的状态而改变,就像它对这些消息所做的那样。这是对许多协议进行建模的绝佳方式,Akka Actor 使用 FSM 对其提供一流的支持。
因此,如果您真的想这样做,您可以在任何地方随意使用类型化的 Actor,它会起作用,但您应该在这样做之前认真考虑您要解决的问题。
有关编译时检查,请参阅SynapseGrid框架。它定义了一个构建 DataFlow 拓扑的 SystemBuilder。在构造时,保证检查通过的类型。然后将生成的系统转换为具有嵌套且正确互连的参与者的 RuntimeSystem。
为什么这对你来说是个问题?具有仅针对它可以处理的消息调用akka.actor.Actor
的类型的接收方法。PartialFunction
为什么需要编译时检查?但是要回答您的问题:一种方法是-对于外部api-围绕您构建一个包装器ActorRef
,然后将消息发送给演员。
事情进展得很快,我考虑过更新 1. Typed Actors 已被弃用2. 相反, Akka Typed 的新概念正在开发中
据我了解,这应该是类型化参与者系统的最终解决方案。但由于这至少是 Akka 2.4 的第三次尝试和最早的计划,这一说法仍有待证实。
我个人确实期待这两种系统都可用:现有的用于更动态的用例,新的用于更强大的用例