如何将行为传递给Akka演员

时间:2015-07-13 15:49:40

标签: scala akka

我正在构建Akka应用程序,它将从多个站点检索RSS提要(XML)。对于每个站点,我将创建一个类,它将XML转换为一些通用对象(Scala案例类),其中包含来自所有RSS提要的公共字段:

case class RssFeed(title: String, ...)

trait RssTransformer {
  def getRssFeed(): Seq[RssFeed]
}

class FooTransformer(...) extends RssTransformer  {
   override def getRssFeed(): : Seq[RssFeed] = {...}
} 

class BarTransformer(...) extends RssTransformer  {
   override def getRssFeed(): : Seq[RssFeed] = {...}
} 

我想创建Akka演员并向他们每个人传递变换器的一些实现(例如,一个演员将与BarTransformer合作,另一个演员与FooTransformer等合作。

问题是我正在使用DI框架(Spring)来启动actor,因此我无法通过actor的构造函数参数传递变换器。唯一的方法是使用一些Message传递它,但在消息中传递行为是Akka中的反模式。

您能否告诉我如何解决这个问题,如果您能就如何改进应用程序架构以避免此问题给我一些建议,那么请更好吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定你的意思是“所以我不能通过actor的构造函数参数传递变换器。”使用spring,您可以使用constructor-arg元素提供constructor arguments

如果问题是你必须使用ActorSystem#actorOf方法创建Actors,一个解决方案是定义自己的Factory Bean,其中ActorSystem和一些Props作为构造函数参数和构造你的Actor。