0

我是一名新手 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

}

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

另外,“*”字符是什么意思?或者我在哪里可以了解有关远程配置的更多信息?(除了akka.io)

4

1 回答 1

1

这个配置的意思是,如果在路径下创建了任何 actor 实例/user/mainRepository/*(即,绑定到 name 的 actor 实例的任何子级/user/mainRepository)不应该部署到本地ActorSystem,而是应该使用远程系统的远程守护进程MqttRemote@127.0.0.1:2553来在那个远程系统中部署这个actor。因此,如果我执行以下操作:

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

我的演员实例context在哪里,那么那个孩子将被远程部署。ActorContextmainRepository

The*是一个通配符,可让您更全面地了解远程部署的参与者。如果配置是这样的:

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

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

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

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

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

有关更多信息,您可以在此处查阅 Remoting 文档。

于 2015-07-07T12:29:12.903 回答