2012-12-03 126 views
0

我有一个设置在其中一个演员(A)创建其监督和重新启动时,它崩溃演员(B)。从演员系统外我想从“嵌套”的演员B.一些价值获取参考监督嵌套演员

我可以用直接问actorSystem的嵌套演员:

val nestedActorB = myActorSystem.actorFor("/user/A/B")

我可以保持一个参考这个演员,或者我应该每次询问嵌套演员的东西时,向演员系统索取参考。 (或者我应该问父母参与裁判)?

什么是在这种情况下最好的做法? (斯卡拉2.9.1和2.0.4阿卡)

感谢, 阿尔伯特

回答

2

是的,你可以保持到演员的引用,每次不问系统actorFor

有本地和远程的演员,你指的是文档通道之间的差异是不明确的,我开了一家ticket

本地演员在actorFor调用期间只查看一次,因此在查找之前它需要存在,而发送给远程参与者的路由始终通过路径,并且每次都在远程节点上查找远程参与者。

+0

所有答案都是正确的,但是我标记了你的名字,因为这对我认为的其他人会有帮助。 – Albert

1

即使重启后的基准保持不变。 B将永远是A的孩子,所以"/A/B"路径是稳定的。如果A是顶级演员,您将始终在"/user/A"之下找到他。所以是的,"/user/A/B"会一直指向同一个演员。

1

正如您所见,in the akka doc引用是一个对象,它在运行时每次发送消息时都会遍历actor树或检查您所指的actor的生动性。

这意味着即使属于该路径的actor重新启动或即使已终止,您也可以在任何时候想要与该actor通信时使用actorFor方法获取的引用。

+0

重读那部分,现在有道理。我已经在一个小测试应用程序中验证了这一点,它可以工作然而,当我在创建之前创建一个对actor B的引用时,ref始终是一个已终止的actor,即使它刚刚在获取ref之后创建。如果它总是遍历演员树,它不应该在实际创建后成为有效的演员参考? – Albert

+0

这个“永远遍历”规则只对远程actor参数有效;为了提高效率,本地查询只执行一次 –

+0

是的,罗兰库恩是正确的存在一个缓存系统查找演员。 –