我有一个设置,其中一个actor(A)创建一个它监督的actor(B),并在它崩溃时重新启动。从演员系统外部我想从'嵌套'演员B中获得一些价值。
我可以使用:
直接向actorSystem询问嵌套actor val nestedActorB = myActorSystem.actorFor("/user/A/B")
我可以保留对这个actor的引用,或者每次我想问嵌套actor有什么问题时,我应该向actorSystem询问ref。 (或者我应该向父演员询问参考)?
在这种情况下,最佳做法是什么? (scala 2.9.1和akka 2.0.4)
谢谢, 阿尔伯特
答案 0 :(得分:2)
是的,您可以保留对演员的引用,而不是每次都使用actorFor
询问系统。
本地和远程演员之间存在差异,您所指的文档段落含糊不清,我打开了ticket。
本地演员只在actorFor
调用期间被查找一次,因此它需要在查找之前存在,而发送到远程actor始终是路径并且远程actor在远程查找节点每次。
答案 1 :(得分:1)
即使重启后参考保持不变。 B
永远是A
的孩子,因此"/A/B"
路径是稳定的。如果A
是顶级演员,您总会在"/user/A"
下找到他。所以是的,"/user/A/B"
总是指向同一个演员。
答案 2 :(得分:1)
正如您所见in the akka doc,引用是一个对象,在运行时,每次发送消息时都会遍历actor树,或者检查您所指的actor的活泼性。
这意味着您可以在任何想要与该actor通信的情况下使用您通过actorFor方法获得的引用,即使属于该路径的actor已重新启动,或者即使它已经终止。