可以将ActorContext(getContext())传递到Actor之外以创建子actor吗?

时间:2019-05-28 19:53:00

标签: 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
 ...
}

使用上述工厂类创建子演员可以吗,或者这被认为是不好的做法?如果被认为是不好的做法,那为什么呢?

例如:

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();

    }
}

1 个答案:

答案 0 :(得分:1)

我认为这种方法没有什么问题,您应该能够访问actor系统之外的上下文。但是....通常,要创建一个actor,您只需要一行代码,如下所示。使用您的代码,无论在哪里创建actor,都必须编写两行代码(一行用于Props,另一行用于调用createActor()方法)。除了实现工厂方法外,如果您从中获得更多好处,也可以采用。

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