1

我有 3 个演员的层次结构: SM -> R -> W SM - 服务经理 R - 路由器 W - 工人

SM 创建了 R 角色,而后者又创建了部署在远程节点上的角色 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'.
4

1 回答 1

1

在其构造函数中传递RSMW然后直接发送到W不需要使用actorSelection

于 2014-04-10T21:55:05.510 回答