1

我正在阅读这个 Akka 文档https://doc.akka.io/docs/akka/current/typed/actor-lifecycle.html#spawning-children和这个代码片段,

CompletionStage<ActorRef<HelloWorld.Greet>> greeter =
    AskPattern.ask(
        system,
        replyTo ->
            new SpawnProtocol.Spawn<>(HelloWorld.create(), "greeter", Props.empty(), replyTo),
        timeout,
        system.scheduler());

这是使用 Ask 模式来创建一个子actor。我的问题是关于这件作品,

replyTo ->
            new SpawnProtocol.Spawn<>(HelloWorld.create(), "greeter", Props.empty(), replyTo),

它是一个代表工厂函数的lamda,它接受一个replyTo参数,并返回一个actor。但是replyTo这里有什么?它来自哪里,它指的是什么?很难对它有一个非常清晰的了解。

谢谢你的帮助!

4

1 回答 1

1

终于弄清楚了,所以让我回答我自己的问题。

基本上,该Ask模式产生一个代表被询问的参与者的答复的未来。换句话说,我们询问,我们得到一个代表占位符的未来返回,当它准备好时,它将由真正的响应来实现。

那么 Akka 是如何知道如何实现这个未来的呢?那就是replyTo参数适合的地方。Akka实际上在actor系统中创建了一个临时actor,replyTo参数用于表示这个临时actor。当被询问的演员回复它从 接收到的消息时Ask,这个临时演员开始运行,并以被询问的演员回复的响应完成未来。

希望这是有道理的,并希望这有助于其他有同样问题的人。Akka 很棒,但我真的希望他们有更好的文档,这样我们就不必那么努力地搜索了。

于 2020-12-08T21:28:30.450 回答