Akka Java在这里。
如果我有以下演员:
// Groovy pseudo-code.
class Fizz extends UntypedActor {
Buzz buzz
String serviceURL
Fizz(Buzz buzz, String serviceURL) {
super()
this.buzz = buzz
this.serviceURL = serviceURL
}
static Props props() {
Props.create(new Creator<ActorRef>() {
@Override
ActorRef create() throws Exception {
new Fizz() // <— but I’d like to create a Fizz with a
// particular buzz/serviceURL
}
}
}
@Override
void onReceive(Object msg) {
// etc.
}
}
我想创建该actor的实例(ActorRef
),然后从我发现的文档/代码示例中,我似乎可以这样做:
actorSystem.actorOf(Props.create(Fizz), “fizz")
我可以假设Props.create(Fizz)
调用调用静态Fizz.props()
方法,从而返回新的Fizz
实例吗?
如果是这样,那么我想知道如何将参数传递给构造函数。根据{{3}},有一个Props.create(Class<T> clazz, Object…args)
重载,但我不知道如何将args
传递给不需要参数的Fizz.props()
。
无论哪种方式,我都在寻找一个具体的Java示例,它展示了如何修改actorSystem.actorOf(Props.create(Fizz.class), “fizz”)
调用以传递buzz
和serviceURL
参数。我需要这个,因为我最终会有很多Fizz
个实例,每个实例都有不同的buzz
和serviceURL
个参数/配置。
答案 0 :(得分:2)
不,它不会调用你的道具方法。
(使用Akka 2.3.8):在您的示例中使用overload(为了简洁起见,使用Java 8):
public static Props props(Buzz buzz, String url) {
Props.create(Fizz.class, () -> buzz, url);
}
您必须在创建时明确调用它才能获得正确的Props
:
ActorRef fizzActor = system.actorOf(
Fizz.props(buzzObject, "somestring"), "actor_name");