Akka类型频道演员的池

时间:2014-01-29 23:05:41

标签: scala akka

我正在考虑使用Akka的新typed channels作为在我的项目中维护actor模型的方法,而不需要大量显式转换的痛苦,你确实需要等待响应。

我很幸运创建了类型化频道并将它们集成在一起,但到目前为止我还没有看到任何简单的解决方案来创建这些演员的并行执行池,这对于常规的无类型演员来说很容易。我是否需要构建自己的路由器系统?

,对于无类型的演员,我可以做这样的事情,我神奇地得到四个演员。

akkaSystem.actorOf(Props[UntypedActor]
                   .withRouter(RoundRobinRouter(nrOfInstances=4)), "routed")

对于键入的频道,我必须做这样的事情:

ChannelExt(akkaSystem).actorOf(new TCActor, "singleton")

显然我可以编写第二个类型的通道来创建一个演员池并在它们之间旋转,但这似乎是某人之前会做过的事情!

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的,Akka已经放弃了对打字渠道的支持,Patrik Nordwall建议使用无类型的演员。在回复方面桥接事物的一种方法是使用ask模式,Future.mapTo方法和模式匹配。

例如,假设您有一些以Base为根的类层次结构,其子类如OakLeafShinyLeafNeedle。从演员外面,你可以做这样的事情:

import akka.pattern.ask

(myActor ? MessageToActor).mapTo[Base] match {
  case oak: OakLeaf => ...
  case shiny: ShinyLeaf => ...
  case needle: Needle => ...
}

我没有关于如何解决所提供的类型化频道的请求方面的建议。

就我个人而言,我认为为了兼容Java而从Akka中删除此功能,因为它使用宏是一个错误。为什么让Scala程序员付出代价是因为Java无法支持某些东西?