java - ActorContext(getContext())可以在Actor外部传递来创建子actor吗?

标签 java akka akka-actor

我想要一个 ActorFactory 类,如下所示

public class SampleActorFactory {
  // Simple create method
  public createActor(AbstractActor.ActorContext actorContext, Props props) {
     return actorContext.actorOf(props);
  }
 // other complex create methods
 ...
}

使用上面的工厂类创建一个子 Actor 是否可以,或者这被认为是一种不好的做法?如果被认为是不好的做法,那么为什么?

例如:

public class SampleActor extends AbstractActor {
 private final SampleActorFactory sampleActorFactory;
 @Override 
 public Receive createReceive() {
        return receiveBuilder()
            .match(SampleData.class, sampleData -> {
              Props sampleProps = getSampleProps(...);
              ActorRef childActor = sampleActorFactory.createActor(getContext(), sampleProps);
            })
            .build();

    }
}

最佳答案

我认为这种方法没有任何问题,您应该能够访问参与者系统之外的上下文。但是......通常要创建一个 Actor ,你只需要一行代码,如下所示。使用您的代码,您必须在创建 Actor 的位置编写两行代码(一行用于 Props,另一行用于调用 createActor() 方法)。除了实现工厂方法之外,如果您从中获得了任何额外的好处,您可以继续使用。

ActorRef demoActor = getContext().system().actorOf(Props.create(MyDemoActor.class, prop1, prop2);

关于java - ActorContext(getContext())可以在Actor外部传递来创建子actor吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349217/

相关文章:

java - Java 中最好的可调整大小的循环字节缓冲区是什么?

scala - 如何使用 spray-json 库将 toJson 应用于案例类的实例

java - Autowiring 在 junit spring mvc 5 中不起作用

java.sql.SQLNonTransientException : [Amazon][JDBC](10900) Not all parameters have been populated

scala - 如何增加(AKKA-HTTP 客户端)singleRequest 响应卡盘大小

java - Akka:如何关闭未终止的 Actor

scala - 如何在scala sbt中获取资源文件夹下的加载文件

scala - ActorSystem 单例注入(inject)

java - array in get parameter 放心

scala - Akka Streams 中的 RestartFlow 未按预期工作