Akka远程配置未命名演员



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

这个配置说的是,如果在路径/user/mainRepository/*下创建了任何参与者实例(即,绑定到名称/user/mainRepository的参与者实例的任何子实例),则不应该部署到本地ActorSystem,而应该使用远程系统MqttRemote@127.0.0.1:2553的远程守护进程在远程系统中部署该参与者。所以如果我这样写:

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

其中contextmainRepository actor实例的ActorContext,那么该子实例将被远程部署。

*是一个通配符,可以让您更一般地了解将远程部署哪些参与者。如果配置是这样的:

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

那么只有绑定到名称foo的子节点将被远程部署。mainRepository actor的任何其他子actor都将部署到本地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上。

更多信息,可以参考Remoting文档

相关内容

  • 没有找到相关文章

最新更新