Scala akka中键入的消息

Scala akka中键入的消息,scala,akka,Scala,Akka,Akka框架建议仅在与外部代码交互时使用类型化的actor。然而,来自阿克卡的标准演员是非类型化的。有没有更好的方法来创建类型安全的参与者?在akka周围是否有其他的actor框架或类型安全包装器?为什么这对您来说是个问题akka.actor.actor具有类型为PartialFunction的receive方法,该方法将仅对其能够处理的消息进行调用。为什么需要编译时检查?但要回答您的问题:一种方法是——对于外部api来说——在ActorRef周围构建一个包装器,然后将消息发送给actor。如果

Akka框架建议仅在与外部代码交互时使用类型化的actor。然而,来自阿克卡的标准演员是非类型化的。有没有更好的方法来创建类型安全的参与者?在akka周围是否有其他的actor框架或类型安全包装器?

为什么这对您来说是个问题
akka.actor.actor
具有类型为
PartialFunction
的receive方法,该方法将仅对其能够处理的消息进行调用。为什么需要编译时检查?但要回答您的问题:一种方法是——对于外部api来说——在
ActorRef
周围构建一个包装器,然后将消息发送给actor。

如果您确实希望actor使用静态类型,那么您不妨在整个代码中使用类型化的actor。出于以下几个原因,强烈反对这样做

1.)您的系统可能会退化为一堆RPC。actor的receive方法非常明显地表明,整个过程都是关于消息传递的,如果您只是在类型化actor上调用方法,就更不用说了

(2)演员真的没有类型。当它运行时,参与者能够处理的消息可能会根据其所处的状态而发生变化,也可能会对这些消息进行处理。这是对许多协议进行建模的一种极好的方法,Akka参与者通过FSMs获得了一流的支持


因此,如果您真的想这样做,您可以在任何地方免费使用类型化的actor,而且它都会工作,但在这样做之前,您应该认真考虑您试图解决的问题。

有关编译时检查的信息,请参阅framework。它定义了构造数据流拓扑的SystemBuilder。在构造时,可以保证检查经过的类型。然后,生成的系统将转换为运行时系统,其中包含嵌套的、适当互连的参与者。

事情进展得相当快,我考虑进行更新 1.打字演员是 2.取而代之的是,一个新的概念正在被开发

据我所知,这应该是类型化参与者系统的最终解决方案。但由于这至少是Akka 2.4的第三次尝试和最早的计划,这一说法还有待证实


我个人确实很期待这两个系统都可用:现有的一个用于更动态的用例,新的一个用于更健壮的用例

你想解决什么问题?@ViktorKlang我想确保只向我的参与者发送正确的消息。你可能想看看Viktor在哪里给出了更多的解释(例如,
变成
)。是的,我想进行编译时检查。我的问题不是你是否需要编译时检查,而是为什么?参与者应该自己决定是否可以处理某条消息。如果你想在之后添加更多消息,你必须对代码进行大量更改,这也会使远程处理更加困难。参与者自己决定只是因为类型不同akka不支持安全。确保您静态地向正确类型的参与者发送消息,而不捕获运行时错误“无法处理消息”,这将是非常好的。对于scala来说,创建可动态编写的可扩展协议是一项艰巨的任务。仍然可以实现: