Akka远程配置未命名的演员

时间:2015-07-07 12:06:15

标签: configuration akka akka-remote-actor

我是新手Akka开发者,我刚开始使用远程处理。我总是看到这种配置:

akka {

  actor {
    provider = "akka.remote.RemoteActorRefProvider"

    deployment {
      "/mainRepository/*" {
        remote = "akka.tcp://MqttRemote@127.0.0.1:2553"
      }
    }
  }

  remote {
    netty.tcp {
      hostname = "127.0.0.1"
    }
  }

  remote.netty.tcp.port = 2553

}

其中actor被命名,例如" mainRepository"但是,如果我想创建未命名的远程演员怎么办?我应该在配置中指定什么?或者我可以通过在请求新演员时不在ActorSystem中设置name参数来实现这一目标吗?

此外," *"性格的意思?或者我在哪里可以了解有关远程配置的更多信息? (除了akka.io)

1 个答案:

答案 0 :(得分:1)

这个配置说的是,如果在路径/user/mainRepository/*下创建了任何actor实例(也就是说,绑定到名称/user/mainRepository的actor实例的任何子节点)都不应该部署到本地ActorSystem但应使用远程系统MqttRemote@127.0.0.1:2553的远程守护程序在该远程系统中部署此actor。所以,如果我做了类似的事情:

context.actorOf(Props[MyActor], "foo")

如果context是我的ActorContext actor实例的mainRepository,那么该子项将被远程部署。

*是一个通配符,可让您更加了解远程部署的演员。如果配置是这样的:

  "/mainRepository/foo" {
    remote = "akka.tcp://MqttRemote@127.0.0.1:2553"
  }

然后,只会远程部署绑定到名称foo的子项。我的mainRepository演员的任何其他孩子都将被部署到本地ActorSystem

因此,使用这种方法,使用通配符,您确实可以创建未命名的子节点并远程部署它们,只要它们的父节点已正确命名并且配置了该名称(如本例所示)即可部署它。孩子们远程。

如果使用此配置驱动方法对您没有吸引力,您还可以以编程方式远程部署actor实例。这看起来像这样:

import akka.actor.{ Props, Deploy, Address, AddressFromURIString }
import akka.remote.RemoteScope    

val address = Address("akka.tcp", "RemoteSystem", "1.2.3.4", 1234)
val ref = system.actorOf(Props[MyActor].
  withDeploy(Deploy(scope = RemoteScope(address))))

在上面的代码中,MyActor的一个实例将部署在远程节点RemoteSystem@1.2.3.4:1234上。

有关详细信息,请参阅远程处理文档here