我正在构建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中的反模式。
您能否告诉我如何解决这个问题,如果您能就如何改进应用程序架构以避免此问题给我一些建议,那么请更好吗?
谢谢
答案 0 :(得分:0)
我不确定你的意思是“所以我不能通过actor的构造函数参数传递变换器。”使用spring,您可以使用constructor-arg
元素提供constructor arguments。
如果问题是你必须使用ActorSystem#actorOf
方法创建Actors,一个解决方案是定义自己的Factory Bean,其中ActorSystem
和一些Props
作为构造函数参数和构造你的Actor。