java - 可以将 ActorContext (getContext()) 传递到 Actor 外部以创建子 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();
}
}
解决方案
我认为这种方法没有任何问题,您应该能够访问参与者系统之外的上下文。但是....通常要创建一个演员,您只需要如下一行代码。使用您的代码,您必须在创建演员的地方编写两行代码(一行用于 Props,另一行用于调用您的 createActor() 方法)。除了实现工厂方法之外,如果您从中获得任何额外的好处,您可以选择它。
ActorRef demoActor = getContext().system().actorOf(Props.create(MyDemoActor.class, prop1, prop2);
推荐阅读
- java - Android 测试异常:class not found Error 解析失败:Lorg/powermock/reflect/Whitebox;
- html - 如何从网页中的按钮在后台运行 powershell 命令。那可能吗?
- jquery - 我想将一个值计算到一个表中,但它只给我一列的结果
- javascript - 如何使用 nuxt 在内部路由到我的帖子
- codeigniter - 将结果中的两行或多行合并为 CI 活动记录上的单个结果
- python - TypeError: with_column() 需要 3 到 4 个位置参数,但给出了 5 个(python)
- r - 选择具有相应位置的数据帧的 p 最高值
- node.js - 如何通过 Puppeteer 和 Request(http 模块)的代理在 Google Cloud App Engine 上启用传出 HTTP 连接的传出请求?
- vue.js - Vuex。无法访问对象变量
- python - 从 pandas 列中解压缩可变长度字典并创建单独的列