我有3个演员的层次结构:
SM -> R -> W
SM - 服务经理
R - 路由器
W - 工人
SM创建了R actor,后者又创建了部署在远程节点上的actor W.
创建Actor W需要一些时间,因为它从外部服务收集信息,所以几秒延迟是正常的。因此,在preStart()
中,我想从W向SM发送一条消息,表明init已完成且完全正常运行。
我试图以这种方式从W到达SM演员:
val myCreatorServiceManagerActorPath = self.path.parent.parent
context.actorSelection(myCreatorServiceManagerActorPath) ! RegisteredServiceWorker(serviceName)
所有这些消息都会转到deadLetter收件箱。 如果我错了,请纠正我,但本地化不应透明吗? 联系SM演员的正确方法是什么?
如果这里有任何帮助,那就是死信日志
monitor [INFO] [03/28/2014 11:34:49.253] [application-akka.actor.default-dispatcher-18] [akka://application/remote/akka.tcp/application@127.0.0.1:2558/user/ServiceManager] Message [pl.mlife.mcloud.runner.common.ServiceRuntimeActor$RegisteredServiceWorker] from Actor[akka://application/remote/akka.tcp/application@127.0.0.1:2558/user/ServiceManager/sample/c3#-1356554194] to Actor[akka://application/remote/akka.tcp/application@127.0.0.1:2558/user/ServiceManager] was not delivered. [3] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
答案 0 :(得分:1)
在其构造函数中R
将SM
传递给W
。然后直接发送到W
,无需使用actorSelection
。