Scala 如何观看远程Akka演员?

Scala 如何观看远程Akka演员?,scala,akka,typesafe-stack,akka-remote-actor,Scala,Akka,Typesafe Stack,Akka Remote Actor,我正在学习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 "STA

我正在学习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
      }
  }
}
我还想看
remoteActor
,这样如果它死了,LocalActor系统就会知道。所以我做了

  val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
  context watch remote
但编译器失败,并显示以下消息

问题

  • 既然它不是
    Actor
    ,为什么我能够将消息发送到
    Actor选择
  • 我怎样才能看RemoteActor
  • 更新
    但是,不推荐使用的API没有抱怨

    val remote = context.actorFor("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
      context watch remote
    

    当您通过
    actorSelection
    进行查找时,返回的对象类型是
    actorSelection
    ,而不是
    ActorRef
    。现在,
    ActorSelection
    既支持
    tell(!)
    又支持
    ask(?)
    ,因此您可以像
    ActorRef
    一样与之交互。但是通过
    actorSelection
    查找参与者支持通配符的概念,因此您返回的
    actorSelection
    可能代表多个参与者,并允许您向多个参与者发送消息。例如,如果您这样做了:

    system.actorSelection(“/user/foo/*”)

    这将为绑定到名称
    foo
    的父
    ActorRef
    下的所有子项提供
    ActorSelection
    。如果有两个孩子,您通过该
    ActorSelection
    发送消息,则该消息将传递给两个孩子

    在您的例子中,看起来您正在查找单个参与者实例。在这种情况下,您可以通过调用
    resolveOne
    ActorSelection
    获取
    ActorRef
    。这将返回一个
    Future[ActorRef]
    ,完成后将为您提供一个
    ActorRef
    ,您可以远程观看。您还可以发送
    ActorSelection
    一条
    Identify
    消息,并等待包含要查看的引用的
    ActorIdentity
    响应

    您应该查看文档,特别是
    通过参与者选择识别参与者部分

    val remote = context.actorFor("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
      context watch remote