向Akka Props和Creator实例注入参数



这里是Akka Java。

如果我有以下actor:

// 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.
    }
}

我想创建该演员的实例(ActorRef),然后从我发现的文档/代码示例中,似乎我可以这样做:

actorSystem.actorOf(Props.create(Fizz), “fizz")

我是否可以假设Props.create(Fizz)调用静态Fizz.props()方法,从而返回新的Fizz实例?

如果是,那么我想知道如何将参数传递给构造函数。根据Java API文档,有一个Props.create(Class<T> clazz, Object…args)过载,但我不知道如何将args传递给不带参数的Fizz.props()

无论哪种方式,我都在寻找一个具体的Java示例,显示如何修改actorSystem.actorOf(Props.create(Fizz.class), “fizz”)调用以传递buzzserviceURL参数。我需要这个,因为我最终会有许多Fizz实例,每个实例都有不同的buzzserviceURL参数/配置。

不,它不会调用你的props方法。

(使用Akka 2.3.8):在示例中使用重载(为简洁起见,使用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");

最新更新