Akka actorSelection vs actorOf Difference

时间:2015-06-17 06:22:49

标签: scala akka actor

这两者有区别吗?当我这样做时:

context.actorSelection(actorNameString)

我得到一个ActorSelection引用,我可以使用resolveOne解析它,然后我找回Future [ActorRef]。但是对于actorOf,我立即获得了ActorRef。除此之外还有其他重要的区别吗?

在我希望将ActorRef包装在Future中的用例可能是什么?

3 个答案:

答案 0 :(得分:9)

actorOf 用于通过提供他们的Props对象来创建新演员

actorSelection "指针"到演员树的路径。通过使用resolveOne,您将在该路径下获得已存在的actor的actorRef - 但是actorRef需要时间来解析,因此未来。

以下是更详细的解释: http://doc.akka.io/docs/akka/snapshot/general/addressing.html

  

一个actor参考指定一个actor,参考的生命周期与该actor的生命周期相匹配;一个actor路径代表一个名字,该名字可能是也可能不是由演员居住,而且路径本身没有生命周期,它永远不会变得无效。您可以在不创建actor的情况下创建actor路径,但是如果不创建相应的actor,则无法创建actor引用。

答案 1 :(得分:0)

在任何一个流程中,都会产生ActorRef的相关成本。 使用system.actorOf创建用户顶级角色需要花费很多,因为它必须处理错误内核初始化,这也会花费很多。从子actor中创建ActorRef非常公平,使其适合每个任务设计的一个角色。如果在应用程序中,对于每个请求,创建一组新的actor而不进行清理,尽管akka actor很便宜,但是你的app可能会耗尽内存。正如你所提到的,另一个好处是actorOf

在抽象术语中,带有actorSelection的{​​{1}}查找actor树并在将来生成actorRef,因为它不是那么直接,特别是在远程系统上。但它强制重新使用。期货抽象了解决ActorRef的等待时间。

答案 2 :(得分:0)

这里是ActorOf与ActorSelection的简要摘要;希望对您有所帮助:

https://getakka.net/articles/concepts/addressing.html

  

可以使用 ActorSystem.ActorSelection 查找演员参考。   方法。该选择可以用于与所述演员进行交流   并在以下情况下查找与选择对应的演员   传递每封邮件。

     

除了ActorSystem.actorSelection外,还有    ActorContext.ActorSelection ,可在任何actor内部以   Context.ActorSelection。这产生了一个与其类似的演员选择   在ActorSystem上是双胞胎,但不是查找从开始的路径   角色树的根始于当前角色。

     

摘要:ActorOf与ActorSelection

     

ActorOf只会创建一个新的actor,并将其创建为直接演员   调用此方法的上下文的子级(可以是任意   演员或演员系统)。 ActorSelection只会查找现有的   消息传递时的参与者,即不创建参与者,或   创建选择时,验证参与者的存在。