我正在学习 akka-remote,其中一个任务是在我的 LocalActorSystem
中获取远程 actor 引用并向其发送消息。
class LocalActor extends Actor {
val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
var counter = 0
def receive = {
case "START" =>
remote ! "Hello from the LocalActor"
case msg: String =>
println(s"LocalActor received message: '$msg'")
if (counter < 5) {
sender ! "Hello back to you"
counter += 1
}
}
}
我的 远程
看起来像
object Remote extends App {
val system = ActorSystem("HelloRemoteSystem", ConfigFactory.load("remote"))
val remoteActor = system.actorOf(Props[RemoteActor], name = "RemoteActor")
remoteActor ! "The RemoteActor is alive"
}
class RemoteActor extends Actor {
def receive = {
case msg: String =>
println(s"RemoteActor received message '$msg'")
sender ! "Hello from the RemoteActor"
}
}
我还希望能够观察remoteActor
,以便在其停止工作时,本地ActorSystem能够得知。因此,我执行了以下操作:
val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
context watch remote
但是编译器报以下错误信息:
问题
- 既然
ActorSelection
不是Actor
,我怎么能够发送消息给它呢? - 如何监视远程
RemoteActor
?
更新
然而,弃用的API没有抱怨。
val remote = context.actorFor("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
context watch remote