Akka - 使用反射创建一个Actor

3

我需要创建一个演员,其确切类型仅在运行时从配置文件中读取。该演员的构造函数不是简单的,即它需要一些在配置文件中定义的参数。

到目前为止,我尝试使用反射来实现:

val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start

不幸的是,这导致了一个 "akka.actor.ActorInitializationException: ActorRef for instance of actor [...] is not in scope. You can not create an instance of an actor explicitly using 'new MyActor'. [...]" 的错误!

现在,我理解这可以保护框架不泄露内部对象的引用,但我该如何解决这个问题?或者说,有什么其他方法可以让我以可行的方式完成我想做的事情?

1个回答

4
也许可以使用Java接口来创建带有参数的演员。创建的(Java)代码如下:
ActorRef actor = actorOf(new UntypedActorFactory() {
  public UntypedActor create() {
    return new MyUntypedActor("service:name", 5);
   }
});

所以你可以传递一个工厂而不是一个函数。这样可能会更好...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接