Java 是否可以将ActorContext(getContext())传递到Actor外部以创建子Actor?
我想要一个ActorFactory类,如下所示Java 是否可以将ActorContext(getContext())传递到Actor外部以创建子Actor?,java,akka,akka-actor,Java,Akka,Akka Actor,我想要一个ActorFactory类,如下所示 公共类SampleFactory{ //简单创建方法 公共createActor(AbstractActor.ActorContext ActorContext,Props Props){ 返回actorContext.actorOf(props); } //其他复杂的创建方法 ... } 使用上面的工厂类创建一个子参与者可以吗,或者这被认为是一种不好的做法?如果被认为是不好的做法,那么为什么呢 例如: 公共类SampleActor扩展了Abst
公共类SampleFactory{
//简单创建方法
公共createActor(AbstractActor.ActorContext ActorContext,Props Props){
返回actorContext.actorOf(props);
}
//其他复杂的创建方法
...
}
使用上面的工厂类创建一个子参与者可以吗,或者这被认为是一种不好的做法?如果被认为是不好的做法,那么为什么呢
例如:
公共类SampleActor扩展了AbstractActor{
私人最终样品工厂样品工厂;
@凌驾
公共接收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);
为什么是actorContext.actorOf(props);不准确的根据这里的文档()getContext().actorOf(props)的使用是一致的。actorContext.actorOf(道具);创建上下文和actorContext.system().actorOf(props)的子级;创建一个监护人的孩子。是的,你是对的。应用程序中的第一个参与者必须通过system.actorOf()创建,后续参与者(如果是子参与者)将从actorContext.actorOf()创建