gpt4 book ai didi

java - Akka actorSelection和resolveActorRef之间的区别

转载 作者:行者123 更新时间:2023-11-30 06:38:48 24 4
gpt4 key购买 nike

我使用两种不同的方法来获得相同的结果,但在一种方法中我需要指定回调时间,为什么?他们服用相同的药物?

    ActorRef resolveActorRef = getContext().getSystem()
.provider() .resolveActorRef(ActorPath.fromString("akka://RootRemoteActors/user/$a/remote.actors.AA"));

上面的代码无需等待即可检索 Actor Ref为什么如果我没有得到证明者,我必须指定一个持续时间?

      ActorSelection actorSelection = getContext().getSystem()
.actorSelection( ActorPath.fromString("akka://RootRemoteActors/user/$a/remote.actors.AA"));



ActorRef ois = actorSelection.resolveOne( new Timeout(1000, TimeUnit.MILLISECONDS ))
.value().get().get();

最佳答案

最明显的区别可能是,如果您在 actor 路径中使用通配符,一个 ActorSelection 可以表示多个 ActorRef。因此,如果您只是在 actorSelection 上调用 .tell 而不是 resolveOne,您就会将消息传递给所有匹配的 actor。

我从未使用过resolveActorRef,但从来源(ActorRefProviderActorSelection)来看,ActorRefProvider使用getChild rootGuardian 来查找您正在寻找的 Actor,因此从您的 Actor 树的顶部向下遍历,直到他最终找到(或找不到)。

ActorSelection 尝试使用询问模式(因此超时)向选择发送一条 Identify 消息,如果收到响应,它将提供 ActorRef从中获得响应。

如果您编写自己的序列化程序,则似乎会使用

resolveActorRef:Akka Docs ,所以如果您只想解析一个 Actor,我会使用 ActorSelection (顺便说一句,您不必解析它即可向它发送消息)。

关于java - Akka actorSelection和resolveActorRef之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44757323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com