在akka中键入消息

时间:2012-07-01 18:16:16

标签: scala akka

Akka框架建议仅使用类型化actor与外部代码进行交互。但是,akka的标准演员是无类型的。有没有更好的方法来创建类型安全的演员?在akka周围是否有其他一些actor框架或类型安全包装器?

4 个答案:

答案 0 :(得分:5)

如果确实希望演员使用静态类型,那么您可以继续在代码中使用键入的actor。出于几个原因,强烈建议不要这样做。

1。)您冒着系统退化成一堆RPC的风险。 actor的receive方法很明显,整个事情都是关于消息传递的,更不用说如果你只是在一个类型化的actor上调用方法。

2。)演员实际上没有类型。当它正在运行时,一个actor能够处理的消息可能会根据状态的变化而变化,就像它对这些消息所做的一样。这是对许多协议进行建模的绝佳方式,Akka演员对FSM具有一流的支持。

所以,如果你真的想这样做,你可以自由地在任何地方使用有类型的演员并且它会起作用,但你应该在考虑之前努力解决你想要解决的问题。

答案 1 :(得分:1)

对于编译时检查,请参阅SynapseGrid框架。它定义了构建DataFlow拓扑的SystemBuilder。构建它时保证检查通过的类型。然后,生成的系统将转换为具有嵌套且正确连接的actor的RuntimeSystem。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

事情进展得非常快,我考虑过提供更新  1.键入的演员是deprecated  相反,在{momemnt

中正在开发一个新的Akka Typed概念

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

我个人确实期待两个系统都可用:现有的系统用于更多动态用例,新系统用于更强大的用例